본문 바로가기

알고리즘/프로그래머스

[프로그래머스 코딩테스트 고득점 Kit / 정렬] H-Index (python)

728x90

테스트 케이스

citations return
[7, 7, 7, 7, 7] 5
[7, 5, 5, 5, 4, 2, 1, 1, 0] 4

 

문제를 풀기 위해 이해해야 할 것:

  • h의 최댓값은 citations의 길이이다.
  • h값은 citations 배열의 요소에만 국한되지 않는다.

 

풀이

def solution(citations):
    answer = 0
    citations.sort()
    h = len(citations)

    while(True):
        for i in range(len(citations)):
            if h <= citations[i]:
                if h <= len(citations) - i:
                    return h
        h -= 1
    return answer

내 풀이

  • h는 인용된 논문의 최댓값이다.
  • citations는 오름차순 정렬한다.
  • h의 최댓값은 주어진 배열의 길이이다. 따라서 h = len(citations)로 초기값을 설정하고 반복문(while)을 돌면서 h값을 1씩 감소시킨다.
  • while 반복문 내에서는 for 반복문을 통해 citations 배열을 돈다. i는 citations의 현재 인덱스를 가리킨다.
  • h가 citations[i] 보다 작다면, 배열에서 i 인덱스 뒤에 있는 요소들은 전부 h보다 크다는 것을 의미한다. 따라서 남아있는 요소들의 개수( len(citations) - i )가 h보다 크다면 h를 리턴한다.

문제 설명을 굉장히 헷갈리게 해놨다.

반응형