PCCP 2번 기출문제

Updated: 2024-12-10

testprogrammers
cover image

PCCP 2번 퍼즐 게임 챌린지

이 문제를 처음 접했을때는 단순히 while() 이랑 for() 루프를 활용한 문제인줄 알았다.

처음에는 현재 플레이어의 currLvl 을 증가 시켜 최솟값까지 도달하게 코드를 짰지만, 최솟값이 큰 경우 답을 제출시 타이아웃 에러가 발생하면서 코드의 실행 횟수를 줄일 필요가 있었다.

따라서 다시 이진법을 통해 값을 재설정할 필요가 있었다. 이진법을 활용하면서 풀면 코드의 활용성도 높이고 렌타임도 많이 줄일 수 있었다.

정답:

1function solution(diffs, times, limit) { 2 let left = 1; 3 let right = 100000; 4 5 while (left < right) { 6 let mid = Math.floor((left + right) / 2); 7 let totalTime = 0; 8 let currLvl = mid; 9 10 for (let i = 0; i < diffs.length; i++) { 11 if (currLvl >= diffs[i]) { 12 totalTime += times[i]; 13 } else { 14 let wrongAmount = diffs[i] - currLvl; 15 let prevTime = i === 0 ? times[i] : times[i - 1] + times[i]; 16 totalTime += wrongAmount * prevTime + times[i]; 17 } 18 19 if (totalTime > limit) { 20 break; 21 } 22 } 23 24 if (totalTime > limit) { 25 left = mid + 1; 26 } else { 27 right = mid; 28 } 29 } 30 return left; 31}

문의 사항이 있으시면 언제든지 개인 메일로 연락 주시기 바랍니다.

메일 보내기

© 2024. kimyoungho all rights reserved.