-
[백준 2343번] 기타레슨코딩 테스트 2024. 1. 3. 17:42
get get get get a guitar 🎶
이진탐색 문제이다.
사실 실제 코딩테스트를 칠 때 이런 문제가 나오면 이진 탐색을 떠올릴 수 있을지 모르겠다..
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class B2343 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int n = Integer.parseInt(st.nextToken()); int m = Integer.parseInt(st.nextToken()); int[] lessons = new int[n]; int left = 0; int right = 0; st = new StringTokenizer(br.readLine()); for (int i = 0; i < n; i++) { lessons[i] = Integer.parseInt(st.nextToken()); right += lessons[i]; //총 레슨 시간 left = Math.max(left, lessons[i]); //레슨 시간이 가장 긴 레슨 } while (left <= right) { int mid = (left + right) / 2; int cnt = getCnt(n, lessons, mid); if (cnt > m) { //구역 수가 m보다 클 때 left = mid + 1; } else { //구역 수가 m보다 작거나 같을 때 right = mid - 1; } } System.out.println(left); } private static int getCnt(int n, int[] lessons, int mid) { int sum = 0; int cnt = 0; for (int i = 0; i < n; i++) { if (sum + lessons[i] > mid) { sum = 0; cnt++; } sum += lessons[i]; } if (sum != 0) { cnt++; } return cnt; } }
🐑 코드 설명
getCnt
- mid: 블루레이의 크기
- 레슨의 수만큼 for문을 돈다.
- sum에 lesson의 시간을 하나씩 더한다.
- 만약 지금까지의 레슨 시간의 합(sum)과 다음에 더할 레슨 시간의 합이 블루레이의 크기(mid)보다 커진다면, sum = 0으로 하고 cnt를 하나 늘린다.
'코딩 테스트' 카테고리의 다른 글
[백준] 26093 고양이 목에 리본 달기 (DP) (0) 2024.06.26 [백준] 1958번 : LCS 3 (0) 2023.07.25 Do it! 알고리즘 코딩 테스트 - 자바 편 (0) 2023.01.20 [백준] 1929번 소수 구하기 (0) 2023.01.19 [백준] 2675번 문자열 반복 - 브론즈 2 (0) 2023.01.17