(Java) 프로그래머스 땅따먹기
·
코딩 테스트
처음 문제를 봤을 때 DFS로 구현해야겠다는 생각을 했다. 아직 DFS에 적응이 된 게 아니어서 더듬더듬 구현했는데 시간 초과 판정을 받았다... 아마 n이 100,000 정도로 커지면서 시간 초과가 난것으로 생각된다.. 풀이 방법이 떠오르지 않아서 결국 검색을 통해 힌트를 얻었다. DP를 이용하여 간단히 풀었다... 코드를 이해하는데는 오래 걸리지 않았지만 익숙하지 않기도 하고.. 비슷한 문제를 만났을 때 DP로 해결할 수 있을까... 따로 정리가 필요하다고 느꼈다. 최종 코드 import java.util.Arrays; class Solution { int solution(int[][] land) { int answer = 16; // DP를 이용하여 최댓값 구하기 for(int i=1; i
(Java) 프로그래머스 올바른 괄호
·
코딩 테스트
몇 가지의 조건을 하나씩 만족시키며 코드를 작성하는 느낌이었다. 1. 첫번째 괄호가 닫힌 괄호 ) 이면 false 2. 열린 괄호인 ( 이면 cnt의 값을 증가 3. 열린 괄호보다 닫힌 괄호가 많으면 false 4. cnt에서 열린 괄호가 있으면 cnt를 감소 5. 최종적으로 cnt의 값이 0인지 검사 후 리턴 퍼즐 푸는것 같은 느낌의 문제여서 재밌었다. 최종 코드 class Solution { boolean solution(String s) { boolean answer = true; int cnt = 0; // 첫번째 괄호가 )이면 false if(s.charAt(0) == ')') { answer = false; } for(int i=0; i
(Java) 프로그래머스 다음 큰 숫자
·
코딩 테스트
문제에 나온 조건대로 작성했다. n을 2진수로 변환하고 1의 개수를 세어 ncnt에 넣었다. n을 1씩 증가시키며 2진수로 변환했을 때 1의 개수가 같으면 반환하게 했다. 다른 분 코드 Integer.bitCount 메서드를 처음 봤는데 이걸 알았다면 더 간단하게 풀었을 것 같다. import java.lang.Integer; class TryHelloWorld { public int nextBigNumber(int n) { int a = Integer.bitCount(n); int compare = n+1; while(true) { if(Integer.bitCount(compare)==a) break; compare++; } return compare; } public static void main(S..
(Java) 프로그래머스 최댓값과 최솟값 (Lv 2)
·
코딩 테스트
간단한 문제여서 금방 풀었다. s를 공백 기준으로 자르고 stream의 min, max를 이용해서 작성했다. 최종 코드 import java.util.Arrays; class Solution { public String solution(String s) { String answer = ""; // s를 공백으로 잘라서 최댓값, 최솟값 추출 int[] temp = Arrays.stream(s.split(" ")).mapToInt(Integer::parseInt).toArray(); int min = Arrays.stream(temp).min().getAsInt(); int max = Arrays.stream(temp).max().getAsInt(); answer += min + " " + max; retu..
(Java) 프로그래머스 최솟값 만들기
·
코딩 테스트
A 배열의 최솟값과 B 배열의 최댓값을 곱하여 더하는 것이 문제 해결 아이디어이다. A큐는 오름차순으로 B큐는 내림차순으로 설정하여 각 배열 값을 넣으면 pool로 뺄 때 최솟값 최댓값이 나오게 된다. 최종 코드 import java.util.*; class Solution { public int solution(int []A, int []B) { int answer = 0; PriorityQueue Aqueue = new PriorityQueue(); PriorityQueue Bqueue = new PriorityQueue(Collections.reverseOrder()); // A의 최솟값과 B의 최댓값을 각 큐에 넣기 for (int i : A) { Aqueue.add(i); } for (int i..
(Java) 프로그래머스 키패드 누르기
·
코딩 테스트
이 문제를 마지막으로 프로그래머스 1단계 문제를 다 풀었다. 2단계는 1/3 정도 남았으니 2단계도 다 풀 수 있도록 계속해야겠다. 1단계 중에서 가장 어려웠던 문제로 느꼈다... 2580 처리를 어떻게 해야 할지 고민을 많이 했다. 키패드 모든 숫자를 xy좌표로 쓸 수 있게 keypad 변수를 만들었고 x와 y의 거리를 계산해서 리턴할 수 있게 했다. 문제 자체는 그렇게 어렵다고 느끼진 않았는데 생각을 코드로 구현하는 게 힘들었다. 최종 코드 class Solution { public String solution(int[] numbers, String hand) { String answer = ""; // * 0 # 바꾸기 int left = 10; int mid = 11; int right = 12;..
(Java) 프로그래머스 크레인 인형뽑기 게임
·
코딩 테스트
바로 스택으로 풀어야겠다는 생각이 든 문제였다. 인형을 세로로 뽑기 때문에 세로로 바꿨는데 다른 분들이 푼 답을 보면 바꿀 필요는 없는 것 같다. 최종 코드 import java.util.Stack; class Solution { public int solution(int[][] board, int[] moves) { int answer = 0; // 인형을 담을 스택 Stack st = new Stack(); // 인형 세로배열로 바꾸기 int[][] temp = new int[board.length][board[0].length]; for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[i].length; j++) { temp[i][j]..
(Java) 프로그래머스 숫자 문자열과 영단어
·
코딩 테스트
문제를 보고 한 글자씩 다 잘라서 만드는 것 말고는 다른 방법이 떠오르지 않았다. split를 이용해서 한글자씩 자르고 리스트로 변환한다. 그리고 switch / case로 원하는 문자열이 만들어지면 임시 배열인 sb에 넣고 sb를 int로 변환해 리턴한다. 다른 분 코드를 보니 replaceAll을 사용해서 간단하게 풀었는데 왜 저 생각을 못했지...? 최종 코드 import java.util.ArrayList; import java.util.Arrays; import java.util.List; class Solution { public int solution(String s) { int answer = 0; // answer로 변환하기 전 String 변수 String sb = new String(..
(Java) 프로그래머스 폰켓몬
·
코딩 테스트
문제를 보고 생각을 많이 했다. 계속 읽다 보니 중복을 제거하고 두 값 중 최솟값을 리턴하면 된다는 걸 깨닫고 쉽게 풀렸다. 문제가 어렵다기 보단 풀이 아이디어를 떠올리는 것이 어려웠다. 최종 코드 import java.util.HashSet; class Solution { public int solution(int[] nums) { int answer = 0; int max = nums.length / 2; // 중복을 제거하기 위해 해시셋에 넣기 HashSet set = new HashSet(); for(int i : nums) { set.add(i); } // 두 값중 최소값을 리턴 if(set.size() > max) { answer = max; } else { answer = set.size()..