- 정렬 문제인데 정렬로 하면 좀 복잡해지는거 같아서 이진 탐색으로 구현함.

- 최대 나올수있는 결과값을 citations의 최댓값으로 잡아두고, 절반씩 나눠가면서 h값의 조건과 맞는지 조사하고, 조건이 맞다면 결과를 저장해 둔 뒤 오른쪽 구간을 검사

- 조건이 맞지 않다면 왼쪽 구간을 검사한다.

def solution(citations):
    answer = 0
    visited = set()
    left = 0
    right = max(citations)

    while left <= right:
        temp = (left + right) // 2
        larger = 0

        for c in citations:
            larger = larger + 1 if c >= temp else larger

        if len(citations) - larger <= temp and temp <= larger:
            answer = temp
            left = temp + 1
        else:
            right = temp - 1

    return answer

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

'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글

[ Lv 2 ] 괄호 회전하기  (0) 2021.06.25
[ Lv 2 ] 배달  (0) 2021.06.25
[ Lv 2 ] 조이스틱  (0) 2021.06.24
[ Lv 2 ] 예상 대진표  (0) 2021.06.24
[ Lv 2 ] 전화번호 목록  (0) 2021.06.23

+ Recent posts