문제
https://school.programmers.co.kr/learn/courses/30/lessons/340212
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 개요
각 퍼즐은 난이도와 소요 시간이 주어지며, 퍼즐을 푸는 데 걸리는 시간은 숙련도에 따라 달라진다. 이 문제의 목표는 주어진 제한 시간 내에 모든 퍼즐을 해결하기 위한 최소 숙련도를 찾는 것
접근 방법
이진 탐색을 활용하여 숙련도의 최솟값을 찾기
- 이진 탐색 초기화: 숙련도의 범위를 1부터 100,000까지 설정
- 시간 계산 로직 구현: 각 숙련도에 대해 주어진 퍼즐을 해결하는 데 걸리는 총 시간을 계산
- 시간 초과 체크: 계산된 총 시간이 제한 시간을 초과하는지 확인하고, 이진 탐색 범위를 조정
import java.util.*;
class Solution {
public int solution(int[] diffs, int[] times, long limit) {
int first = 1;
int last = 100_000;
int answer = last;
while (first <= last) {
int mid = (first + last) / 2;
long time_total = 0;
long time_prev = 0;
for (int i = 0; i < diffs.length; i++) {
if (diffs[i] <= mid) {
time_total += times[i];
} else {
time_total += (diffs[i] - mid) * (time_prev + times[i]) + times[i];
}
time_prev = times[i];
if (time_total > limit) {
break;
}
}
if (time_total > limit) {
first = mid + 1;
} else {
answer = Math.min(answer, mid);
last = mid - 1;
}
}
return answer;
}
}
'문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 등굣길 - Java (2) | 2024.10.12 |
---|---|
[프로그래머스] [PCCP 기출문제] 3번 / 충돌위험 찾기 - Java (0) | 2024.09.30 |
[프로그래머스] 두 원 사이의 정수 쌍 - Java (0) | 2024.09.10 |
[프로그래머스] 가장 긴 팰린드롬 - Java (0) | 2024.09.10 |
[프로그래머스] 연속 펄스 부분 수열의 합 - Java (1) | 2024.09.09 |