📖 문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 풀이 방식
• 이분 탐색
1. times 배열을 오름차순 정렬한다.
2. left는 0으로, right는 times 배열의 마지막 원소 * 사람 수로 정한다.
3. left <= right일 때까지 이분 탐색한다.
1) (left+right)/2 한 값인 mid 시간을 구한다.
2) 반복문을 통해 해당 시간으로 총 몇 명을 심사할 수 있는지 계산한다.
long cnt = 0; // 심사한 총 사람 수
for(int i = 0 ; i < times.length ; i++) {
cnt += mid / times[i];
}
3) 총 심사 인원이 사람 수 n보다 적다면, 모든 사람을 심사할 수 없으므로 left를 mid + 1 값으로 이동시킨다.
4) n보다 크거나 같다면, 모든 사람을 심사할 수 있으므로 right을 mid - 1로 이동해 탐색 범위를 줄이고, answer에 mid를 넣어둔다. (나중에 더 최솟값이 나올 수 있긴 함)
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
import java.util.*;
class Solution {
public long solution(int n, int[] times) {
long answer = 0; // 모든 사람이 심사 받는 데 걸리는 시간의 최솟값
Arrays.sort(times);
long left = 0;
long right = times[times.length -1] * (long)n; // 모든 사람이 가장 느리게 심사 받는 시간
while(left <= right) {
long mid = (left + right) / 2;
long cnt = 0; // 총 심사한 인원
for(int i = 0 ; i < times.length ; i++) {
cnt += mid / times[i];
}
if(cnt < n) // 해당 시간 동안 모든 사람 검사할 수 없으므로 시간 더 필요
left = mid + 1;
else { // right 범위 줄이기
right = mid - 1;
answer = mid;
}
}
return answer;
}
}
|
cs |
💦 어려웠던 점
- 이분 탐색 right의 초기값 설정을 무작정 times의 가장 큰 원소로 할 뻔했다.
- 매 범위마다 총 심사 가능한 인원 수를 구하고, 이 숫자를 n과 비교해 활용할 생각을 하지 못 했다. (저 for문 만들 생각은 했는데 그 다음에 멍..하였다..)
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[프로그래머스] 입국심사-JAVA
문제 링크 https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시
born2bedeveloper.tistory.com
[알고리즘] 프로그래머스 입국심사 -이분탐색- 자바
programmers.co.kr/learn/courses/30/lessons/43238?language=java 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은
youngest-programming.tistory.com
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Level2] 점 찍기 (JAVA) (0) | 2024.03.13 |
---|---|
[프로그래머스/Level2] 디펜스 게임 (JAVA) (0) | 2024.03.11 |
[프로그래머스/Level3] 파괴되지 않은 건물 (JAVA) (0) | 2024.03.08 |
[프로그래머스/Level3] 보석 쇼핑 (JAVA) (0) | 2024.03.08 |
[프로그래머스/Level3] 징검다리 건너기 (JAVA) (0) | 2024.03.08 |