프로그래머스 LV2 정복
[프로그래머스 LV2 Python] H-Index
조조링
2024. 10. 18. 14:25
728x90
반응형
문제
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
제한 사항
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
접근 방법
이 문제를 풀기 위해서는 우선 "인용된 횟수"와 "논문 개수" 사이의 관계에 집중해야 합니다.
먼저 논문이 얼마나 인용되었는지를 확인하고, 그 인용 횟수가 상위 몇 개 논문에서 충족되는지를 확인하는 과정이 핵심입니다.
1. 인용 횟수에 따라 논문을 정렬하여 상위 몇 개의 논문이 해당 인용 횟수를 충족하는지 확인한다.
2. 논문을 차례로 확인하면서 H-Index의 조건에 맞는 최대 값을 찾는다.
풀이 순서
1. 논문 이용 횟수 정렬
- 주어진 논문 인용 리스트(citations)를 내림차순으로 정렬합니다.
- 내림차순 정렬을 하면 많이 인용된 논문부터 차례로 확인할 수 있습니다.
2. H-Index 조건 확인
- 상위 i+1번째 논문이 i+1번 이상 인용되었는지 확인합니다.
- 이때, i+1번째 논문까지의 인용 횟수가 i+1번 이상이라면 H-Index가 될 수 있습니다.
- 만약 이 조건이 더 이상 만족되지 않으면, 그 전까지의 i값이 최종 H-Index가 됩니다.
코드 구현
def solution(citations):
# 1. 인용 횟수를 내림차순으로 정렬
citations.sort(reverse=True)
# 2. H-Index 계산
h_index = 0
for i in range(len(citations)):
# i+1번째 논문이 i+1번 이상 인용되었는지 확인
if citations[i] >= i + 1:
h_index = i + 1
else:
break
return h_index
코드 예시로 설명
- 입력: [3,0,6,1,5]
- 내림차순 정렬: [6,5,3,1,0]
- i=0인 경우, 6회 인용 >= 첫 번째 논문 ▶︎ H-Index 조건 만족 (h=1 이상 가능)
- i=1인 경우, 5회 인용 >= 두 번째 논문 ▶︎ H-Index 조건 만족 (h=2 이상 가능)
- i=2인 경우, 3회 인용 >= 세 번째 논문 ▶︎ H-Index 조건 만족 (h=3 이상 가능)
- i=3인 경우, 1회 인용 < 네 번째 논문 ▶︎ H-Index 조건 불만족 (h=4 불가능)
- 따라서, H-Index는 3이 됩니다.
728x90
반응형