def solution(citations):
citations.sort()
for i in range(len(citations)):
if citations[i] >= len(citations)-i:
return len(citations)-i
return 0
코드 설명
먼저 citations 리스트를 정렬을 해줌으로써 인용된 횟수를 오름차순으로 정렬합니다. 그 후 citations 리스트의 길이만큼 반복문을 수행하고 만약 논문에 인용된 횟수가 논문의 수 - i 라면 논문의수 - i 를 return 합니다. 만족하지 못한다면 0을 리턴하여 줍니다.
Point : 오름차순 정렬을 통하여 가장 적은 인용 횟수를 맨 앞으로 배치하여 줍니다. 이를 통하여 불필요한 반복문을 없앨 수 있습니다.
이 문제에서 가장 중요한 점은 h index 에 대한 이해입니다. 아래의 예시를 보며 설명하겠습니다.
citations = [1, 18, 19, 21] 로 입력이 주어질 경우 h-index는 3이 됩니다. 논문의 인용된 횟수를 h index로 지정하는 것이 아닌, 3회 이상 인용된 논문이 3개 존재하므로 h-index 는 1이 아닌 3이 됩니다. 즉, citations 리스트의 길이에서 i 만큼을 뺀 값을 리턴하여야 한다는 뜻입니다. 다른 예시도 한번 살펴보겠습니다.
citations = [1, 2, 5, 23, 33, 35] 로 입력이 주어질 경우 h-index는 4가 됩니다. 반복문을 돌아가면서 수행하다 보면 i = 2 에서 if 조건문을 만족하게 됩니다. (citations[2]=5 >= 6-2) 따라서 6-2 = 4를 리턴하게 됩니다.
728x90
'SW개발 > 코딩테스트' 카테고리의 다른 글
[프로그래머스]기능 개발-스택/큐 (0) | 2020.11.28 |
---|---|
[프로그래머스]주식가격-스택/큐 (0) | 2020.11.27 |
[프로그래머스]가장 큰 수-정렬 (0) | 2020.11.25 |
[프로그래머스]K번째수-정렬 (0) | 2020.11.24 |
[프로그래머스]네트워크-DFS/BFS (0) | 2020.11.20 |