프로그래머스 등급2 - H-Index
H-Index 문제 바로 가기
풀이 날짜: 2026-05-24
baekjoon 알고리즘 문제 풀이
풀이 코드
def solution(citations):
answer = 0
citations.sort(reverse=True)
for i in range(len(citations)):
if citations[i] >= i+1:
answer = i + 1
else:
break
return answer
문제 핵심
H-Index 문제는 “h번 이상 인용된 논문이 h편 이상일 때의 최대 h값”을 구하는 문제이다. 처음에는 인용 횟수를 기준으로 직접 개수를 나누어 비교하려 했지만, 조건을 단순하게 판단할 수 있는 방법이 필요했다. 문제를 다시 분석해보니, 인용 횟수를 내림차순으로 정렬하면 현재 위치만으로 H-Index 조건을 쉽게 확인할 수 있다는 점을 발견하였다.
접근 방법 (아이디어)
논문 인용 횟수를 내림차순으로 정렬하면, 앞쪽 논문일수록 인용 횟수가 많아진다. 이 상태에서 현재 위치까지의 논문 개수를 확인하면서:
- 현재 논문의 인용 횟수 >= 현재까지의 논문 개수 조건을 만족하는지를 검사하면 된다. 예를 들어 [6, 5, 3, 1, 0] 에서
- 1번째 논문은 6회 인용
- 2번째 논문은 5회 인용
- 3번째 논문은 3회 인용 까지는 조건을 만족한다. 하지만 4번째 논문은 1회 인용인데, 논문 개수는 4개이므로 조건을 만족하지 못한다. 따라서 최대 H-Index는 3이 된다
정렬 후 순차 탐색
먼저 sort(reverse=True)를 사용해 인용 횟수를 내림차순으로 정렬하였다. 이후 반복문을 통해 논문을 하나씩 확인하였다.
- for i in range(len(citations)): 여기에서 i + 1은 현재까지 확인한 논문 개수를 의미한다.
H-Index 조건 확인
현재 논문의 인용 횟수가 논문 개수 이상인지 비교하였다. 조건을 만족하면 현재 값이 가능한 H-Index이므로 answer를 갱신하였다. 반대로 조건을 만족하지 못하는 순간 이후의 논문들도 모두 더 작은 인용 횟수를 가지게 되므로 반복을 종료하였다.