[프로그래머스] Level2_H-index

이강희·2021년 9월 11일
0

프로그래머스

목록 보기
15/15
post-thumbnail

H-index

문제설명

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과에 따르면, H-Index는 다음과 같이 구합니다.

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의
H-Index입니다.

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

제한사항

  • 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
  • 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.

이 문제를 풀기 위해선 H-index에 대한 정확한 이해가 필요하다.
많은 사람들, 나를 포함해서 H-index는 citations의 값 중 하나일 것이라고 생각하는데 이는 큰 오산이다.

문제의 예시에 나온 배열에서 3이 H-index라고 소개되었는데
공교롭게도 해당 배열의 길이는 5, 그리고 3회 이상 인용된 논문은 딱 3회이기 때문에 많은 사람들이 citations의 값 중 하나일 것이라고 생각할 수 있다.

H-index는 어떤 논문에 대해 인용 횟수가 x라고 한다면
H-index는 x이하의 값 중 하나의 값이 된다.

예로, 배열 citations가 [88, 89]라면 이 citations에 대한 H-index는 2이다.

그래서 이를 위해 이중 for문을 사용,
첫 번째 for문에선 citations의 모든 인덱스에 접근하기 위해
두 번째 for문에선 citations의 각 원소의 값까지 접근을 위해 사용했다.
먼저 정렬된 citations에서, i번 이상 인용된 논문은 해당 인덱스를 포함한 이후의 인덱스 모두의 개수와 같다.

따라서 두 번째 for문에서 위 조건을 이용하여 j를 증가, 이를 h_temp라는 배열에 넣고 이중에 최대값을 반환하도록 하였다.

예외로, citations의 길이가 1이고 이 값이 0이 아니라면 무조건 H-index는 1이다.
그리고 만약 원소의 값이 0이라면 이는 h_temp에 0을 넣는 조건으로 따로 처리했다.

코드

def solution(citations):
    answer = 0
    citations.sort()
    h_temp = []
    if len(citations) == 1:
        return 1
    for i in range(0, len(citations)):
        if citations[i] == 0:
            h_temp.append(0)
        else:
            for j in range(0, citations[i]):
                if j + 1 <= len(citations) - i:
                    h_temp.append(j + 1) 
    answer = max(h_temp)
    return answer
profile
Dongguk Univ. Computer Science Engieneering👋

0개의 댓글