[프로그래머스/Lv2] H-Index
문제
H-Index는 과학자의 생산성과 영향력을 나타내는 지표이다.
어떤 과학자의 H-Index를 나타내는 값인 h를 구하려고 한다.
H-Index는 다음과 같이 구한다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index이다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 반환하는 함수를 만들어야 한다.
제한사항
1. 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하이다.
2. 논문별 인용 횟수는 0회 이상 10,000회 이하이다.
코드
def solution(citations):
for i in range(1, len(citations)+1):
if i > sorted(citations, reverse=True)[i-1]:
return i-1
return len(citations)
설명
의도적으로 문제를 복잡하게 하려고 했는지는 모르겠지만
프로그래머스에서 설명한 H-Index를 구하는 방법이 굉장히 이상하게 적혀있다.
개인적으로는 문제에서 설명한 H-Index를 구하는 방법은 무시하고 구글에 H-Index 구하는 법을 검색해서
이해하는 편이 훨씬 낫다고 생각한다.
H-Index를 구하는 방법을 다시 설명하자면,
citations | index |
6 | 1 |
5 | 2 |
3 | 3 |
1 | 4 |
0 | 5 |
위 표와 같이 우선 citations를 내림차순으로 정렬한 뒤 index와 비교한다.
citations의 원소가 index의 원소보다 작아지는 순간, 그 앞 인덱스가 H-Index가 된다.
우리는 H-Index가 무엇인지가 중요한게 아니라
H-Index를 찾는 코드를 짜는게 중요하기 때문에 H-Index에 관한 정보는 링크를 첨부한다.
아래부터는 코드에 대한 설명이다.
for i in range(1, len(citations)+1):
1부터 citations 배열의 길이+1 까지 숫자들(index)을 꺼내면서 반복한다.
if i > sorted(citations, reverse=True)[i-1]:
return i-1
내림차순으로 정렬한 citations의 배열의 i-1번째 원소와 i를 비교한다.
이 때 위 if문의 조건을 만족하면 i-1(H-Index)을 반환한다.
return len(citations)
위 if문의 조건을 만족하는 값이 없다면 citations의 길이를 반환한다.
ex) [100, 100, 100] -> 3, [0] -> 1
'코딩테스트 > 연습문제' 카테고리의 다른 글
[프로그래머스/Lv2] 괄호 회전하기 (1) | 2022.10.28 |
---|---|
[프로그래머스/Lv2] 행렬의 곱셈 (0) | 2022.10.27 |
[프로그래머스/Lv2] [1차] 캐시 (0) | 2022.10.26 |
[프로그래머스/Lv2] 점프와 순간 이동 (0) | 2022.10.21 |
[프로그래머스/Lv2] 멀리 뛰기 (0) | 2022.10.21 |