공부하고 기록하는, 경제학과 출신 개발자의 노트

프로그래밍/코딩테스트 문제풀이

[Python] 프로그래머스. 숫자 게임 (Level 3)

inspirit941 2019. 10. 26. 17:21
반응형

 

1. A팀의 최댓값이 B팀의 최댓값보다 크다 = B가 무엇을 내놓아도 이길 수 없다. 포기한다.

2. A팀의 최댓값보다 B팀의 최댓값이 크다 = 이길 수 있다.

 

A팀을 최댓값 -> 최솟값 순서로 정렬하고, B의 최댓값을 빠르게 구할 수 있도록 heapq 라이브러리를 사용한다.

import heapq

def solution(A, B):
    # A의 최솟값이 B의 최댓값보다 크면, 이길 방법이 없으므로 0
    if min(A) > max(B):
        return 0
    # 최댓값 -> 최솟값 순으로 정렬
    A.sort(reverse = True)
    
    # 맨 앞에 B의 최댓값이 위치하도록 heapq 자료구조를 사용한다.
    B = [-i for i in B]
    heapq.heapify(B)
    
    count = 0
    for a in A:
        # 이길 수 없는 경우. 그냥 넘어간다.
        if a >= abs(B[0]):
            continue
        else:
        # 이길 수 있는 경우. B의 최댓값을 꺼내고 count를 증가시킨다.
            heapq.heappop(B)
            count += 1
    return count
반응형