URL https://programmers.co.kr/learn/courses/30/lessons/42747#
문제설명
- 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회 이하입니다.
문제풀이
- 일단 H-Index의 이해가 필요함
- 주어진 배열 citations = [3, 0, 6, 1, 5]는 각 논문에 인용된 h값임, 그리고 citations의 갯수가 논문의 갯수임
- 전체 논문중 많이 인용된 순으로 정렬 후 논문의 수가 인용된수 보다 크거나 같아지면 해당 논문의 숫자가 H-index임 아래의 표에서는 10번째 논문의 수가 H-Index로 답은 10임
인용수 | 논문수 |
---|---|
35 | 1 |
34 | 2 |
32 | 3 |
28 | 4 |
22 | 5 |
21 | 6 |
12 | 7 |
13 | 8 |
11 | 9 |
10 | 10 |
7 | 11 |
- 위의 내용을 정리하자면 인용된 수를 큰 수부터 sorting한 뒤 논문의 갯수를 세다가, 논문의 수가 인용의 수보다 크거나 같아지는 논문 수를 찾으면 됨
- citations의 배열안에 있는 수를 리턴하는 것이 아님.
- 마지막에 [2, 2] 와 같은 예외는 해당 논문의 수를 리턴하게 하면 됩니다.
H-Index 추가 설명
- https://www.ibric.org/myboard/read.php?Board=news&id=270333
- https://m.blog.naver.com/PostView.nhn?blogId=promarketyj&logNo=221434899288&categoryNo=22&proxyReferer=https:%2F%2Fwww.google.com%2F
1
2
3
4
5
6
7
8
9
10
11
12
13
def solution(citations):
citations.sort(reverse = True)
flag = False
for i in range(0,len(citations)):
if i >= citations[i]:
flag = True
return i
if flag == False:
return len(citations)
1
2
citations = [3, 0, 6, 1, 5]
solution(citations)
1
3
1
2
citations = [47, 8, 10, 10, 15, 17, 22, 24, 28, 32, 42, 11]
solution(citations)
1
10
1
2
citations = [1, 7, 0, 6, 4, 1]
solution(citations)
1
3
1
2
citations = [2, 2]
solution(citations)
1
2
1