코딩하는 포메라니안 2021. 8. 27. 15:40

1. 문제

 

 

 

2. 풀이 과정

 

방법 1) 이진탐색을 사용한다. 최소값 즉, start = 0이고 최대는 가능한 n편의 최대가 배열의 길이이므로 end = l로 설정하였다.

def solution(citations):
    citations.sort()
    l = len(citations)
    s = 0
    e = l #최댓값
    while s <= e:
        m = (s+e)//2
        if m==0 or (0 < m <= l and citations[l-m] >= m):
            s = m+1
        else:
            e = m-1
    return e

 

방법 2) 속도는 방법 1)이 이진탐색을 사용하여 더 빠르고 이 방법은 순차탐색이므로 더 느리다. 대신, 코드 측면에서 볼 때는 더 간결하다.

def solution(citations):
    answer = 0
    #6, 5, 3, 1, 0 :내림차순 정렬
    #1, 2, 3, 4, 5 :index
    answer = max(map(min, enumerate(sorted(citations, reverse = True), start = 1)))
    return answer