반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- SQL
- java
- 142085
- MySQL
- 59409
- 10기
- 티스토리챌린지
- 수료
- 싸피
- softeer
- 146355
- 백준
- 퍼즐 조각 채우기
- 소프티어
- 조건에 부합하는 중고거래 상태 구하기
- PCCP
- 59412
- 후기
- 132202
- SSAFY
- 설명
- 14942
- 오블완
- 정기 코딩 인증평가
- 프로그래머스
- 핵심
- 해결
- 진료과별 총 예약 횟수 출력하기
- 165672
- 12930
Archives
- Today
- Total
개발 쥬스
[프로그래머스/Java] 43238 퍼즐 조각 채우기 본문
반응형
🔗 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43238
🔍 해결 과정
위 문제는 이분탐색의 방식을 활용하여 문제를 해결할 수 있습니다. 문제에서 입국심사에 걸리는 시간의 최솟값을 도출하는 것이 핵심이므로 시간을 기준으로 이분탐색을 위한 과정을 설계해야 합니다. 과정은 다음과 같습니다.
1️⃣ 시간의 최솟값인 leftIdx를 0으로 초기화해준다.
2️⃣ 최대로 오래 걸리는 입국심사 시간을 rightIdx로 초기화해준다. (times의 최댓값을 n명만큼 곱한 값)
3️⃣ 이분탐색의 방식을 활용해 걸릴 수 있는 시간의 중간 값 mid를 생성해주고, mid를 기준으로 입국심사가 가능한 사람 수를 계산한다.
4️⃣ 주어진 n과 비교해가며 적절한 최소 시간을 계속 계산해간다.
✏️ 코드
/**
최소 시간을 리턴해야하므로 시간을 기준으로 세운 다음 이분 탐색을 진행.
**/
class Solution {
public long solution(int n, int[] times) {
long answer = 0;
long left = 0L; // 최소 시간
long right = 0L;
for (int time : times) {
right = Math.max(right, (long) time);
}
right *= (long) n; // 걸릴 수 있는 최대 시간
while (left <= right) {
long mid = (left + right) / 2L; // mid가 기준 시간
long people = 0; // 총 기다리는 사람이 int 범위를 넘어갈 수 있으므로 long 처리
for (int time : times) {
// 가능한 사람 수를 구하기
people += mid / time;
}
if (people >= n) {
answer = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return answer;
}
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스/Java] 181862 세 개의 구분자 (2) | 2024.11.13 |
---|---|
[프로그래머스] 49191 순위 (0) | 2024.11.11 |
[프로그래머스/Java] 84021 퍼즐 조각 채우기 (0) | 2024.10.30 |
[프로그래머스/Java] 42628 이중우선순위큐 (0) | 2024.10.30 |
[프로그래머스/sql] 131534 상품을 구매한 회원 비율 구하기 (0) | 2024.10.23 |