상세 컨텐츠

본문 제목

[프로그래머스 코딩테스트 고득점 kit] h index python (reverse 풀이)

카테고리 없음

by yukmim 2022. 1. 20. 15:23

본문

def solution(citations):
    answer = 0
    citations.sort(reverse=True)

    for i in range(1, len(citations)+1):
        if citations[i-1] >= i:
            answer = i

    return answer

<문제 이해>

우리가 세어봐야할 인용수(h)의 수는 논문의 갯수가 len(citations)인 5개니, 최대 논문 인용수는 5개가 될것이고, 5회까지 인용수를 세어봐야한다.

각 논문 별 인용수가 담긴 리스트 citations = [3, 0, 6, 1, 5] 을 정렬한다.

리스트를 정렬하면 citations = [0, 1, 3, 5, 6]이 된다.

1회 이상 인용된 논문의 수(1과 같거나 큰 수)는 6,5,3,1 로 4개이다.

2회 이상 인용된 논문의 수(2와 같거나 큰 수)는 6,5,3,2 로 4개이다.

3회 이상 인용된 논문의 수(3과 같거나 큰 수)는 6,5,3 로 3개이다.

4회 이상 인용된 논문의 수(4와 같거나 큰 수)는 6,5 로 2개 이다.

5회 이상 인용된 논문의 수(5와 같거나 큰 수)는 6 으로 1개이다.

우리가 구하는 h는 

"h이상 인용된 논문의 수가 h개 이상"이어야 하기 때문에. 4회(2개)와 5회(1개)는 탈락하고 나머지 1,2,3회중 가장 큰 수 인 3회가 출력 되어야한다.

 

인용된 논문의 수를 역으로 정렬했을 때, h회 이상 인용된 논문이 h개 이상이려면 

citations[h]가 h와 같거나 이상이어야한다. 

 

<문제 푸는 순서>

1. citations을 역으로 정렬한다.

2. for문으로 1부터 citations의 길이만큼 돌린다.

3. if문으로 만약 인덱스와 그 수가 같거나 이상이면 answer에 집어넣는다

4. answer는 매번 조건에 부합한다면 업데이트 된다.  

5. 루프가 끝나면 answer가 출력된다

댓글 영역