디펜스 게임

최민수·2023년 2월 26일
0

알고리즘

목록 보기
16/94
⭐️
import heapq

def solution(n, k, enemy):
    answer = 0
    tot, cnt, defense = 0, 0, k
    heap = []
    
    for en in enemy:
        tot += en
        heapq.heappush(heap, -en)
        
        # 적 숫자보다 적을 경우
        if n < tot:
            # 무적권 사용
            if defense:
                if heap:
                    # 최대힙 이용해 최댓값 삭제 가능
                    el = -heapq.heappop(heap)
                    tot -= el
                defense -= 1
            # 무적권 사용 불가
            else:
                break
        cnt += 1
    
    # 최소, 최대 무적권 개수와 enemy 길이 고려
    return min(max(cnt, k), len(enemy))
  • 가장 큰 수를 유지할 때 쓰기 좋은 자료구조: Max Heap(최대힙)!
  • 문제의 세부 조건을 따져 엣지 케이스 판별능력 중요
    • 무적(k)의 수가 도출한 결과값(cnt) 보다 클 경우 k가 정답.
    • enemy 배열의 길이가 무적(k) 보다 작을 경우 작은 쪽이 정답.

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

profile
CS, 개발 공부기록 🌱

0개의 댓글