[프로그래머스 / Java] 숫자 짝꿍
·
CodingTest/Java로 푼 코딩 테스트
풀이Map 형식으로 X, Y의 문자 빈도를 계산한다.9부터 0까지 내림차순으로 반복문을 만든다.두 개의 Map의 같은 키가 있으면 값 중 작은값 만큼 숫자를 추가한다(String)결과에 따라 리턴값을 변경한다.import java.util.*;class Solution { public String solution(String X, String Y) { // 두 숫자의 각 숫자 빈도를 저장할 맵 생성 Map countX = new HashMap(); Map countY = new HashMap(); // X의 숫자 빈도 계산 for (char c : X.toCharArray()) { countX.put(c, countX..
[프로그래머스 / Java] 점 찍기
·
CodingTest/Java로 푼 코딩 테스트
첫번째 풀이import java.util.*;class Solution { public long solution(int k, int d) { long answer = 0; for(int a=0; a 결과 시간초과 몇개와 다수의 실패가 보인다.제한 사항의 k와 d의 길이가 100만이여서 시간초과가 뜨는 것 같다.이 방식은 계속 시간복잡도가 클거 같아 다른 방식을 생각해보았다.  두번째 풀이import java.util.*;class Solution { public long solution(int k, int d) { long answer = 0; for(int a=0; a 결과일단 시간초과 문제는 해결하고 테스트 수행 속도도 반으로 줄었다. 세번..
[프로그래머스 / Java] 혼자 놀기의 달인
·
CodingTest/Java로 푼 코딩 테스트
1. 해답 코드import java.util.*;class Solution { static boolean[] visit; static int depth; public int solution(int[] cards) { int answer = 1; int len = cards.length; visit = new boolean[len]; List list = new ArrayList(); for (int i = 0; i  2. 해설노드들이 이어져있고 하나씩 탐색하다가 탐색 할 수 없는 곳에서 멈춘다 -> DFS 문제 solution 메서드는 배열을 순회하면서 방문하지 않은 노드를 발견하면 DFS를 시작합니다. open 메서드는 해당..
[프로그래머스 / Java] 과일장수
·
CodingTest/Java로 푼 코딩 테스트
1. 문제  2. 생각문제가 길긴한데 찬찬히 살펴보면과일장수가 가능한 많은 사과를 팔았을 때 -> 아무리봐도 상자 몇개 제한 이라는 말이 없다 -> 비싼 순 m개씩 짤라서 팔면된다.Ex) 입출력 예시 1정렬 : 1 1 1 / 2 2 3 3 => 상자 1개 나옴 m = 4 개씩 묶기 : (위에서 3개 = 2)*m = 2 * 4 = 8Ex) 입출력 예시 2정렬 : 1 1 2 / 2 2 2 / 4 4 4 / 4 4 4 => 상자 4개 나옴 m = 3 개씩 묶기 : (4*m) (4*m) + (2*m) + (1*m) 계산 : 4*3+ 4*3 + 2*3 + 1*3 = 24+6+3 = 33-> 음... 정렬하고 m개씩 짜르고... 그 안에서 계산하면 된다... 3. 코드import java.util.*;class S..
[프로그래머스 / Java] 하샤드 수
·
CodingTest/Java로 푼 코딩 테스트
1. 문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 문제 해석 받은 숫자의 각 자리수의 합이 나누어 떨어져야한다. 예를들어 1111을 받으면 1+1+1+1 = 4, 1111이 4로 나누어 떨어지면 하샤드 수 이다. 그럼 각 자리수를 더해서 직접 나누어 보면 되지않을까? 3. 첫번째 풀이 class Solution { public boolean solution(int x) { boolean answer = true; int x2 = x; int tmp = 0; if (x > 1000) { int a = x/1000; tmp += a; //1000..
[Java / 코딩테스트] 겹쳐진 압축 해제
·
CodingTest/Java로 푼 코딩 테스트
1. 생각 전형적인 스택 문제 ")"까지 보고 반복문 2. 코드 import java.util.*; class Solution { public String solution(String s){ String answer = ""; Stack st = new Stack(); for (char c : s.toCharArray()) { if(c == ')') { String tmp = ""; while (!st.empty()) { String t = st.pop(); if(t.equals("(")) { String num = ""; while (!st.empty() && Character.isDigit(st.peek().charAt(0))) { num = st.pop() + num; } String res = "..
[Java / 코딩테스트] 최대 길이 연속수열
·
CodingTest/Java로 푼 코딩 테스트
1. 생각 중복을 제거해야 하므로 Set을 쓰면 될거같은데 정렬을 해야하나? nums의 길이가 300,000 이므로 시간복잡도를 최대한 적게 써야한다. 정렬 없는 HashSet으로 해결 2. 코드 import java.util.*; class Solution { public int solution(int[] nums){ int answer = 0; HashSet numSet = new HashSet(); for (int num : nums) { numSet.add(num); } for (Integer i : numSet) { if(numSet.contains(i-1)) continue; int cnt = 0; while (numSet.contains(i)) { cnt++; i++; } answer = M..
[Java / 코딩테스트] 청소 문제
·
CodingTest/Java로 푼 코딩 테스트
1. 생각 일단 k번 반복해야 한다. -> for(k) 초기위치 (0,0) 방향 0 : 오른쪽 1 : 아래 2 : 왼쪽 3 : 위 조건에 따라 이동 2. 생각대로 코딩 [ 코드 ] public int[] solution(int[][] board, int k){ int[] answer = new int[2]; //초기화 answer[0] = 0; answer[1] = 0; int direction = 0; for (int i = 0; i < k; i++) { boolean change = false; //방향전화 변수 // 넘어가면 방향 전환 if (direction == 0 && answer[1] == board.length-1) {change = true;} if (direction == 1 && an..
[Java / 코딩테스트] 사다리타기
·
CodingTest/Java로 푼 코딩 테스트
1. 생각 일단 n번 반복해야 한다. -> for(n), 임시값 만들기 ladder[i][j]에 값이 포함되면, 오른쪽으로 이동, 임시값 +1 ladder[i][j]+1에 값이 포함되면, 왼쪽으로 이동, 임시값 -1 임시값 -> 문자(A,B,C,D,E...)로 변경 2. 생각대로 코딩 [ 코드 ] import java.util.*; public class Problem01 { public char[] solution(int n, int[][] ladder){ char[] answer = new char[n]; int[] temps = new int[n]; for (int i = 1; i < n+1; i++) { int temp = i; for (int j = 0; j < ladder.length; j++..