문제:
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. 정렬하면 i번 이상 인용된 책이 몇 권 있는지 확인하기 편해짐 => 정렬, 그리디 문제
내 풀이:
def solution(citations):
answer = 0
citations.sort()
for i in range(len(citations)):
if len(citations) - i <= citations[i]:
answer = len(citations) - i
break
return answer
히든 테케를 미리 방어하고 코드를 깔끔하게 짜기 위해서는 좀 극단적인 테케를 많이 적용해보고 생각해 봐야 할 것 같다.
더 나은 다른 사람 풀이:
출처:
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
def solution(citations):
citations.sort(reverse=True)
answer = max(map(min, enumerate(citations, start=1)))
return answer
enumerate(citations, start=1) 을 사용해서 아주 간결하게 푼 방법이다..!
(1, 6)
(2, 5)
(3, 3)
(4, 1)
(5, 0)
(현재 책의 인용수 이상으로 인용수를 가진 책의 수 , 현재 책의 인용수) 이렇게 나온다.
이렇게 튜플이 나오면 min() 으로 이 중에서 작은 애를 골른다.
(1, 6) → min(1,6) = 1
(2, 5) → min(2,5) = 2
(3, 3) → min(3,3) = 3
(4, 1) → min(4,1) = 1
(5, 0) → min(5,0) = 0
그리고 이 값 중에서 가장 큰 수를 구한다.
max([1, 2, 3, 1, 0]) = 3
짠..!
'알고리즘' 카테고리의 다른 글
| 퍼즐 조각 채우기 - 프로그래머스 Python (0) | 2026.03.10 |
|---|---|
| 문자열 압축 - 프로그래머스 Python (0) | 2026.03.04 |
| 가장 큰 수 - 프로그래머스 Python (0) | 2026.03.03 |
| 구명보트 - 프로그래머스 Python (0) | 2026.03.02 |
| 타겟 넘버 - 프로그래머스 Python (0) | 2026.02.21 |