목록코테 (56)
우당탕탕 개발일지
문제 작업이 요청되는 시점과 소요시간을 담은 2차원 배열이 주어진다. 작업의 요청부터 종료까지 걸린 시간의 평균에 대한 최소값을 구하는 Soluntion 함수 구현 (소수점 이하의 수는 버림) 입출력의 예 풀이 요청시간과 소요시간이 주어진다. 종료까지의 최솟값을 구하기때문에 빨리끝나는것부터 진행하면 된다구 생각했다. 나는 요청시간+소요시간의 값이 가장 작은것부터 진행을 하고 만약 같을 경우, 요청시간이 더 짧은 것을 우선으로 진행한다! 라고 생각했다. 그런 생각은 했지만 구현하는 것은 어려워 여러 블로그을 참고하였다. 내 생각과 원리는 비슷했으나 요청과 소요시간에 대해서 각자 오름차순으로 정렬을 해야 했다. 해당 방식으로 구현하는 것이 더 간단하고 예외상황에 대한 처리가 없을 것 같다는 생각이 들었다. ..
문제 입국심사를 기다리는 사람 수 n명 각 심사관이 한명을 심사하는데 걸리는 시간이 담긴 배열 times 모든 사람이 심사를 받는데 걸리는 시간의 최솟값을 return 하도록 solution 함수 구현 입출력의 예 풀이 너무 어렵당....! 이분탐색에 대한 공부도 필요했다! 이분 탐색을 통해서 최소 시간과 최대 시간의 중간 시간 동안 얼마나 많은 인원 심사 완료할 수 있을지 비교해여야 한다. 만약 완료되었을 경우 최소 시간을 구하기 위해 이분탐색을 사용하여 구한다. 그렇지 않을 경우에는 더 큰 시간과 비교한다. 이분탐색을 통해서 전체 크기에서 절반의 크기만 살펴보기에 1부터 시작하기는 것보다 더 빨리 찾을 수 있다. 1. 이분탐색 이분탐색이란 내림차순 혹은 오름차순으로 정렬되어 있는 수열에서 원하는 값을..
문제 어피치가 연속적으로 나열되어 있는 모든 종류의 보석을 쇼핑한다. 가장 적은 개수를 선택할 수 있는 부분을 인덱스로 구해라 입출력 예 풀이 너무 어렵다... 다른 방법으로도 풀어볼려고 한다 다양한 블로그를 참고하여 문제를 풀었다..! [ 변수 설명 ] gemCountMap : 어피치가 선택한 보석 종류 및 개수 selectedGemsQueue : 어피치가 선택한 보석 List gemSet : 포함하여야 하는 모든 보석의 종류 start : 리스트 시작 번호 size : 리스트의 개수 >> gems의 길이로 설정한 이유는 보석 리스트의 크기와 비교하기 위해서 큰 값이 필요함 result : 최종 리스트의 시작 번호 [ 반복문 ] 반복문을 통해 gems 배열의 원소를 하나씩 비교한다. 반복문 안의 로직을..
문제 각 팀별로 한명씩 나와서 숫자가 더 큰 쪽이 승리하는 게임 A팀은 출전 순서를 정해였고 B팀은 그 순서를 알고 있다. 이때 B팀이 얻을 수 있는 최고점은 몇점입니까? 입출력 예 풀이 A와 B 배열 모두 오름차순 정렬하였다 B의 최고점을 구하기 때문에 B가 더 클 경우에만 A, B 배열 모두 다음 인덱스를 비교하도록 하였다. 또한 B가 승리하였기에 결과 값에 1를 더하였다. B가 A보다 작거나 같을 경우네는 B 배열만 다음 인덱스를 비교하도록 하였다. A보다 B가 더 큰 경우가 많을 경우을 찾기 때문이다. B의 다음 인덱스 값과 A는 이전과 동일한 인덱스 값으로 비교한다. 해당 과정은 배열의 길이만큼 진행한다. 출전의 횟수는 각 팀의 인원수 만큼이기 때문이다. 최종 코드 public int s4(in..
문제 1. n개 원소의 합이 s가 되는 수의 집합 2. 1번을 만족하면서 각 원소의 곱이 최대가 되는 집합 입출력 예 풀이 다른 블로그을 참고하여 해당 문제의 풀이를 이해했다. 1. 조건 2번을 충족하기 위해서는 s/n의 값을 각각의 원소로 가지고 있어야한다. 2. s%n의 값은 각각의 원소에 +1씩 한다 예를 들어 n = 3, s = 9 로 가정 9 % 3 = 0 -> 따라서 각가의 원소는 3이 된다. {3, 3, 3} => 9 * 9 * 9 = 729 {1, 4, 4} => 1 * 16 * 16 = 256 {2, 2, 5} => 4 * 4 * 25 = 400 . . . 이렇게 {3, 3, 3}일 경우 2번의 조건을 만족한다. 그렇다면 나머지가 있는 경우를 살펴보겠다. n = 3, s = 11 11 /..
문제 1. 야근 피로도는 야근을 시작한 시점에서 남은 일의 작업량을 제곱하여 더한 값 2. N시간 동안 야근 피로도를 최소화하도록 일할 것. 3. 1시간 동안 작업량 1만큼을 처리 가능 퇴근까지 남은 N 시간과 각 일에 대한 작업량 works에 대해 최소 야근 피로도 구하기 입출력 예 풀이 많은 풀이들을 살펴보았다. 해당 풀이에 대한 분석을 한 결과, 큰수를 작은수가 되도록 하는것이 관건이었다. 더군다나 남은 일에 대한 제곱을 하기 때문에 일의 개수보다는 가장 큰 작업량을 줄이는 것이 중요하다. 따라서 우선순위 큐를 사용하였다. 1. 우선순위 큐 : 들어간 순서에 상관없이 일정한 규칙에 따라 우선순위 설정 후, 우선순위가 가장 높은 데이터가 먼저 출력 큐 사용법에 대해서는 해당 게시글을 보면서 공부하였다..
문제 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 입출력 예 풀이 동적계획법(DP) 사용 2차원 배열 dp 값 설정 dp의 원소 값 중 가장 큰 값 출력 최종 코드 public static int solution(int[][] triangle) { System.out.println("정수 삼각형"); int len = triangle.length; // 1. dp 초기화 int[][] dp = new int[len][len]; dp[0][0] = triangle[0][0]; // 1-1. 첫번째 요소 초기화 [i][0] for (int i = 1; i
문제 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값 구하기 입출력 예 풀이 1. Map 초기화 1차 시도 1) Map 초기화 -> For 문 사용 2) 초기화한 Key값에 대한 개수를 설정 -> 이중 For문 사용 결과 : 시간 초과로 인한 실패 2차 시도 Map로 초기화 map.getOrDefault(Key, DefaultValue) Key : map에서 값을 가져올 Key 값 DefaultValue : 지정된 키가 존재하지 않을 경우, 해당 값으로 초기화 => 지정된 키가 존재하지 않을 경우, 두번쨰 매개변수를 통해 초기화하고 그렇지 않을 경우 해당 Value 반환 최종 코드 import java.util.HashMap; import java.util.ArrayList; import jav..