알고리즘/프로그래머스
프로그래머스 [[PCCP 기출문제] 2번 / 퍼즐 게임 챌린지]
개발하는 장씨
2025. 3. 4. 09:19
📌 프로그래머스 [[PCCP 기출문제] 2번 / 퍼즐 게임 챌린지]
🔗 문제 링크
문제 설명 📄
퍼즐 조각 난이도를 조정하는 게임
diffs 리스트는 각 퍼즐 조각의 난이도를 나타냄.
times 리스트는 각 퍼즐 조각을 맞추는 데 걸리는 시간.
제한 시간 limit 내에서 최대한 난이도를 낮춘 상태에서 모든 퍼즐을 맞추려면 최소 난이도는 얼마인가?
문제 접근 방식 💡
- 누적 시간 계산
- times 리스트를 사용하여 각 퍼즐 조각이 얼마나 걸리는지 누적.
- 최소 난이도 탐색
- 이진 탐색을 사용하여 limit 내에서 가능한 최소 난이도(level)를 찾음.
Solution 💻
def solution(diffs, times, limit):
faild = [times[0]]
for i in range(1, len(diffs)):
faild.append(times[i] + times[i - 1])
def solveTime(level):
cur_time = 0
for i in range(len(diffs)):
if diffs[i] > level:
cur_time += (diffs[i] - level) * faild[i] + times[i]
else:
cur_time += times[i]
return cur_time
left, right = 1, max(diffs)
while left < right:
mid = (left + right) // 2
if solveTime(mid) <= limit:
right = mid
else:
left = mid + 1
return left
시간 복잡도 분석 ⏲️
- 이진 탐색: O(log max(diffs))
- 시간 계산 (solveTime): O(n)
- 총 시간 복잡도: O(n log max(diffs))