[JAVA 문제 풀이] 403. 퍼즐 게임 챌린지

프로그래머스 (340212)
Stupefyee's avatar
Jul 28, 2025
[JAVA 문제 풀이] 403. 퍼즐 게임 챌린지
notion image
notion image
 

내가 작성한 코드

class Solution { public int solution(int[] diffs, int[] times, long limit) { int left = 1; // 숙련도의 최소값 int right = 100000; // 숙련도의 최대값 int answer = right; // 최대 숙련도로 시작 while (left <= right) { int mid = (left + right) / 2; // 숙련도의 중간값 // 제한시간 내에 문제를 풀 수 있는 경우 if (canSolve(diffs, times, limit, mid)) { answer = mid; // 숙련도를 중간 값으로 변경 right = mid - 1; // 숙련도 최대값 하락 } else { // 풀 수 없는 경우 left = mid + 1; // 숙련도 최소값 증가 } } return answer; } // 좌, 우 값의 중간값을 기준으로 제한시간 내에 문제들을 풀수 있는지 확인하는 메서드 public boolean canSolve(int[] diffs, int[] times, long limit, int level) { long totalTime = times[0]; // 첫 퍼즐은 무조건 틀리지 않음 for (int i = 1; i < diffs.length; i++) { int diff = diffs[i]; // 현재 문제 레벨 int timeCur = times[i]; // 현재 문제 시간 int timePrev = times[i - 1]; // 전 문제 시간 if (diff <= level) { // 숙련도가 문제 레벨보다 높은 경우 totalTime += timeCur; // 현재 문제 시간만큼 증가 } else { // 낮은 경우 int mistake = diff - level; // 실패 횟수 totalTime += (long) mistake * (timeCur + timePrev) + timeCur; // 시간 계산 } // 제한 시간 이하인지 확인 if (totalTime > limit) return false; } return true; } }
Share article

stupefyee