(Java) 프로그래머스 다리를 지나는 트럭
·
코딩 테스트
문제를 보자마자 큐를 이용해야 한다는 느낌이 왔다. 다만 실제 코드 작성은 쉽게 되지 않았다. 특히 까다로웠던 부분은 다리 위 트럭 무게 총합 + 다음 올라와야 하는 트럭 무게가 다리 하중보다 큰 경우였는데 이때 가장 먼저 올라갔던 트럭이 내려와야 하므로 대기하는 시간을 추가하는 부분이었다. 이 부분을 고려하지 못해서 계속 실패하다 검색을 통해 힌트를 얻어 해결했다. 최종 코드 import java.util.LinkedList; import java.util.Queue; class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { int answer = 0; Queue queue = new LinkedL..
(Java) 프로그래머스 소수찾기_L2
·
코딩 테스트
문제를 해결하기 위해서는 크게 두 부분이 필요했다. 첫 번째는 주어진 numbers에서 모든 조합을 찾는 것이고 두 번째는 조합에서 소수를 판별해서 그 개수를 반환하는 것이다. 소수를 판별하는 부분은 금방 작성했지만 모든 조합을 찾는데 시간이 정말 오래 걸렸다. 모든 조합을 찾는 방법이 재귀, 백트래킹 등등 어려 방법이 있었는데 재귀를 거의 써본 적이 없어서 재귀 기본 강의를 듣고 실제 코드 작성은 막히는 부분마다 검색으로 해결하여 풀었다. 프로그래머스 말고도 백준에서 재귀와 백트래킹 유형을 풀면서 익숙해져야겠다. 최종 코드 import java.util.HashSet; import java.util.Iterator; class Solution { // 전역변수로 HashSet 선언 HashSet hs ..
(Java) 프로그래머스 위장
·
코딩 테스트
의상을 조합하는 경우의 수를 어떻게 계산해야 하는지 고민했다. 결국 하나하나 따져보니 A와 B를 조합하는 경우의 수는 A * B가 되고 A를 착용하고 B는 착용하지 않거나 A를 착용하지 않고 B를 착용하는 경우도 있으니 (A+1) * (B+1)이 된다. 마지막으로 아무것도 안입는것은 허용되지 않으므로 아무것도 입지 않은 1가지를 빼주면 (A+1) * (B+1) - 1 이 된다. 최종 코드 import java.util.HashMap; class Solution { public int solution(String[][] clothes) { // 곱셉을 위해 1로 초기화 int answer = 1; HashMap map = new HashMap(); // 옷 종류별로 map에 넣기 for (int i=0; i
(Java) 프로그래머스 카펫
·
코딩 테스트
문제를 보고 어떻게 풀어야 할지 한참을 생각했다. 해결방법은 떠오르는데 코드로 옮기지를 못해서 너무 스트레스를 받았다. 검색을 통해 힌트를 얻었는데 고민하던 부분을 continue로 해결하는 것을 보고 좀 허무하고 반성이 되었다. 최종 코드 class Solution { public int[] solution(int brown, int yellow) { int[] answer = new int[2]; int total = brown + yellow; for (int i = 1; i col) { continue; } // 가로 - 2 * 세로 - 2 가 노란색 개수이므로 if((row - 2) * (col - 2) == yellow) { answer[0] = col; answer[1] = row; retu..
(Java) 프로그래머스 구명보트
·
코딩 테스트
처음에 문제를 잘못 읽어서 구명보트에 2명씩 타는 게 아니라 무게 제한만 지키면 몇명이든 탈 수 있는 것으로 생각해서 완전히 망했었다.... 문제를 다시 읽고 보트 제한이 2명이라는것을 알고 나서는 오히려 더 쉽게 풀 수 있었다. 최종 코드 import java.util.Arrays; class Solution { public int solution(int[] people, int limit) { int answer = 0; // 무거운 사람과 가벼운 사람을 분류하기 위한 정렬 Arrays.sort(people); int idx = 0; // 최소로 구명보드를 사용하려면 가장 무거운 사람과 가장 가벼운 사람 for (int i = people.length - 1; i >= idx; i--) { // 무거..
(Java) 프로그래머스 주식가격
·
코딩 테스트
문제를 이해하는게 너무 어려웠다. 검색을 통해 설명들을 차분하게 읽고 나서야 해결 방법이 보이기 시작했다. 코드를 작성하는건 그리 어렵지는 않았다. 최종 코드 class Solution { public int[] solution(int[] prices) { int[] answer = new int[prices.length]; // 이중 for문을 돌면서 값 비교 for (int i = 0; i prices[j]) { answer[i]++; break; } answer[i]++; } } return answer; } }
(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..