[프로그래머스 Lv.2] PCCP 기출문제 2번 - 퍼즐 게임 챌린지

2024. 12. 10. 12:10·코딩테스트
728x90
반응형

문제

당신은 순서대로 n개의 퍼즐을 제한 시간 내에 풀어야 하는 퍼즐 게임을 하고 있습니다.

각 퍼즐은 난이도와 소요 시간이 정해져 있습니다.

당신의 숙련도에 따라 퍼즐을 풀 때 틀리는 횟수가 바뀌게 됩니다

현재 퍼즐의 난이도를 diff, 현재 퍼즐의 소요 시간을 time_cur, 이전 퍼즐의 소요 시간을 time_prev, 당신의 숙련도를 level이라 하면, 게임은 다음과 같이 진행됩니다.

  • diff ≤ level이면 퍼즐을 틀리지 않고 time_cur만큼의 시간을 사용하여 해결합니다.
  • diff > level이면, 퍼즐을 총 diff - level번 틀립니다. 퍼즐을 틀릴 때마다, time_cur만큼의 시간을 사용하며, 추가로 time_prev만큼의 시간을 사용해 이전 퍼즐을 다시 풀고 와야 합니다. 이전 퍼즐을 다시 풀 때는 이전 퍼즐의 난이도에 상관없이 틀리지 않습니다. diff - level번 틀린 이후에 다시 퍼즐을 풀면 time_cur만큼의 시간을 사용하여 퍼즐을 해결합니다.

예를 들어 diff = 3, time_cur = 2, time_prev = 4인 경우, level에 따라 퍼즐을 푸는데 걸리는 시간은 다음과 같습니다.

  • level = 1이면, 퍼즐을 3 - 1 = 2번 틀립니다. 한 번 틀릴 때마다 2 + 4 = 6의 시간을 사용하고, 다시 퍼즐을 푸는 데 2의 시간을 사용하므로 총 6 × 2 + 2 = 14의 시간을 사용하게 됩니다.
  • level = 2이면, 퍼즐을 3 - 2 = 1번 틀리므로, 6 + 2 = 8의 시간을 사용하게 됩니다.
  • level ≥ 3이면 퍼즐을 틀리지 않으며, 2의 시간을 사용하게 됩니다. 퍼즐 게임에는 전체 제한 시간 limit가 정해져 있습니다. 제한 시간 내에 퍼즐을 모두 해결하기 위한 숙련도의 최솟값을 구하려고 합니다. 난이도, 소요 시간은 모두 양의 정수며, 숙련도도 양의 정수여야 합니다.

퍼즐의 난이도를 순서대로 담은 1차원 정수 배열 diffs, 퍼즐의 소요 시간을 순서대로 담은 1차원 정수 배열 times, 전체 제한 시간 limit이 매개변수로 주어집니다.

제한 시간 내에 퍼즐을 모두 해결하기 위한 숙련도의 최솟값을 정수로 return 하도록 solution 함수를 완성해 주세요.

 

코드

def success(diffs, times, limit, level):
    time_taken = 0 
    
    for i in range(len(times)):
        if diffs[i] <= level:
            time_taken += times[i]
        else:
            cnt_miss = diffs[i] - level
            time_miss = (times[i] + times[i-1]) * cnt_miss + times[i]
            time_taken += time_miss
                
        if time_taken > limit:
            return False
        
    return True

def solution(diffs, times, limit):
    start = 1
    end = max(diffs)

    while start <= end:
        level = (start + end) // 2
        if success(diffs, times, limit, level):
            end = level - 1
        else:
            start = level + 1
    
    return start

 

메모

level을 1부터 순차 탐색하는 것이 아닌, diffs의 최댓값을 end로 잡고 이진 탐색을 해나가는 문제였다.

728x90
반응형

'코딩테스트' 카테고리의 다른 글

[프로그래머스 Lv.2] 다리를 지나는 트럭 (스택/큐)  (1) 2024.12.11
[프로그래머스 Lv.2] 큰 수 만들기 (그리디)  (0) 2024.12.11
[프로그래머스 Lv.2] 2021 카카오 블라인드 채용 - 메뉴 리뉴얼  (3) 2024.12.11
[프로그래머스 Lv.1] 2024 카카오 인턴쉽 - 가장 많이 받은 선물  (0) 2024.12.10
[프로그래머스 Lv.1] PCCP 기출문제 1번 - 동영상 재생기  (0) 2024.12.10
'코딩테스트' 카테고리의 다른 글
  • [프로그래머스 Lv.2] 큰 수 만들기 (그리디)
  • [프로그래머스 Lv.2] 2021 카카오 블라인드 채용 - 메뉴 리뉴얼
  • [프로그래머스 Lv.1] 2024 카카오 인턴쉽 - 가장 많이 받은 선물
  • [프로그래머스 Lv.1] PCCP 기출문제 1번 - 동영상 재생기
View synthesis 공부하는 대학원생
View synthesis 공부하는 대학원생
AI - view synthesis에 대해 공부하고 있으며, AI 공부하시는 분들과 함께 소통하고 싶습니다 😍
  • View synthesis 공부하는 대학원생
    Happy Support's Blog
    View synthesis 공부하는 대학원생
  • 전체
    오늘
    어제
    • 분류 전체보기 (62)
      • View synthesis (3)
      • Backbone (5)
      • Generative Models (5)
      • On-device AI (3)
      • ML (2)
      • DL (1)
      • LLM (2)
      • 코딩테스트 (25)
      • 에러 해결 모음집 (11)
      • 기타 (4)
  • 링크

  • 인기 글

  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
View synthesis 공부하는 대학원생
[프로그래머스 Lv.2] PCCP 기출문제 2번 - 퍼즐 게임 챌린지
상단으로

티스토리툴바