(Python) 프로그래머스 - 퍼즐 게임 챌린지

2024. 9. 14. 21:37·코딩 테스트

프로그래머스에 새로운 문제가 올라왔길래 오랜만에 풀어보았다.

최초에는 완전탐색으로 접근하면 시간초과가 나는걸 알면서도 다른 로직이 안떠올라서 일단 완전탐색으로 구현하고

이진탐색으로 수정해서 풀이에 성공했다.

 


로직

배열의 크기가 300,000 이므로 완전 탐색으로 접근하면 100% 시간 초과가 난다.

여기서 이진 탐색을 떠올려야 하는데, level의 최댓값이 diffs 요소중 가장 큰 값이라는걸 캐치해서 풀어야 한다.

그러므로 1 <= level의 최솟값 <= diffs 요소의 최댓값이 된다.

이진탐색으로 level의 값들을 cal 함수에 넣어주면서 탐색하면 최종적으로 level의 최솟값이 나오게 된다.

 

cal 함수에서는 제한시간을 넘으면 탐색을 중지하고 False를 반환하고, 제한시간안에 모든 탐색을 끝냈다면 True를 반환한다. cal 함수의 반환 결과에 따라 이진탐색과정을 반복한다.

 

최종 코드

def solution(diffs, times, limit):
    answer = 0

    left = 1
    right = max(diffs)

    while left <= right:
        mid = (left + right) // 2

        if cal(diffs, times, limit, mid):
            answer = mid
            right = mid - 1
        else:
            left = mid + 1

    return answer


def cal(diffs, times, limit, level):
    time_added = 0
    
    for i in range(len(diffs)):
        diff = diffs[i]
        time_cur = times[i]
        time_pre = 0
        if i != 0:
            time_pre = times[i - 1]

        if diff <= level:
            time_added = time_added + time_cur
        else:
            re_cnt = diff - level
            re_cal = time_pre + time_cur
            cal_time = re_cnt * re_cal + time_cur
            time_added = time_added + cal_time

        if time_added > limit:
            return False

    return True

 

저작자표시 비영리 변경금지 (새창열림)

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

(Python) 프로그래머스 - 석유 시추  (1) 2024.03.08
(Python) 프로그래머스 - 도넛과 막대 그래프  (1) 2024.03.06
(Java) 프로그래머스 - 미사일 요격  (0) 2023.11.08
(Java) 프로그래머스 - 리코쳇 로봇  (0) 2023.08.01
(Java) 프로그래머스 - 디펜스 게임  (0) 2023.07.29
'코딩 테스트' 카테고리의 다른 글
  • (Python) 프로그래머스 - 석유 시추
  • (Python) 프로그래머스 - 도넛과 막대 그래프
  • (Java) 프로그래머스 - 미사일 요격
  • (Java) 프로그래머스 - 리코쳇 로봇
로승리
로승리
  • 로승리
    Roy's Blog
    로승리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Issuefy
      • Language
      • Spring
      • Database
      • Network
      • Kubernetes
      • AWS
      • 코드스쿼드
      • 코딩 테스트
      • 생각정리
      • 국비지원
      • 회고
      • 컨퍼런스, 세미나
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
로승리
(Python) 프로그래머스 - 퍼즐 게임 챌린지
상단으로

티스토리툴바