(Java) 프로그래머스 프린터
·
코딩 테스트
간단해 보이는 듯 하지만 은근히 생각해야 할게 많아서 꽤나 재미있게 풀었던 문제였다. 최종 코드 import java.util.Collections; import java.util.PriorityQueue; class Solution { public int solution(int[] priorities, int location) { int answer = 0; // 내림차순으로 우선순위 큐 만들기 PriorityQueue pq = new PriorityQueue(Collections.reverseOrder()); for(int n : priorities){ pq.offer(n); } // 큐가 비어있지 않다면 while(!pq.isEmpty()){ // 큐에서 나오는 값과 매칭되는 경우를 탐색. for(..
(Java) 프로그래머스 전화번호 목록
·
코딩 테스트
간단하게 해결할 수 있을 것 같은 문제였는데 substring을 이용하여 j까지 자르는 생각을 하는데 오래 걸렸다. 그 부분을 넘기니 바로 답이 나와 깔끔하게 해결했다. 최종 코드 import java.util.HashMap; class Solution { public boolean solution(String[] phone_book) { boolean answer = true; HashMap hs = new HashMap(); // 전화번호 해시맵에 넣기 for (int i = 0; i < phone_book.length; i++) { hs.put(phone_book[i], i); } // containsKey과 substring으로 접두어인지 검사 for (int i = 0;i < phone_book..
(Java) 프로그래머스 튜플
·
코딩 테스트
문제가 복잡하게 쓰여있는데 차근히 읽어보니 어렵지 않았다. 풀이 방법은 바로 보이는데 String으로 넘어오는 s를 어떻게 배열로 변환할지 생각하는데 시간을 많이 썼다. 최종 코드 import java.util.*; class Solution { public int[] solution(String s) { int[] answer = {}; // s의 맨 앞 {{ 부분 자르기 s = s.substring(2, s.length()); // s의 맨 뒤 }} 부분 자르고 },{ 부분 -로 변경 s = s.substring(0, s.length()-2).replace("},{", "-"); // -을 기준으로 자르기 String[] temp = s.split("-"); // 람다를 이용해서 길이별로 정렬 Arr..
(Java) 프로그래머스 H-Index
·
코딩 테스트
문제의 카테고리가 정렬로 되어 있어 정렬을 이용해야 한다고 생각하고 문제를 읽기 시작했는데 이 문제에 정렬이 꼭 필요한가?? 하는 생각이 들어 생각나는 대로 코드를 작성했다. 문제도 이해하기 까다로운 부분이 몇 개 있어 고민하다가 약간 끼워 맞추듯이 작성했다. 정답으로 처리되긴 하나 다른 분 코드를 보니 왜 정렬을 하는지 알 수 있었다. 최종 코드 import java.util.ArrayList; import java.util.Collections; import java.util.List; class Solution { public int solution(int[] citations) { int answer = 0; int h = 0; List list = new ArrayList(); for (int ..
(Java) 프로그래머스 가장 큰 정사각형 찾기
·
코딩 테스트
완전탐색으로 구현해야 되나 고민이 많이 되었다. 시간초과가 날 확률이 높아보여서 생각만 하고 시도해보지 않았다. 다른 방법이 떠오르지 않아 검색을 통해 해결했다. 그런데 왠걸..... 또 DP를 이용해야 하는 문제였다...... DP의 개념이 이해하기 힘들었는데 이번 문제를 해결하면서 전보단 많이 정리가 된 것 같다. 그래도 어렵다... 최종 코드 class Solution { public int solution(int [][]board) { int answer = 1234; // 계산을 위한 배열 만들기 int[][] temp = new int[board.length + 1][board[0].length + 1]; for (int i = 0; i < board.length; i++) { for (int..
(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..