아래의 문제는 프로그래머스 코딩테스트 고득점 Kit 내용이며 코드는 직접 푼 내용입니다.
H-index
문제상황
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. H-index를 나타내는 값인 h를 구하라.
어떤 과학자가 발표한 논문 n편 중,
h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index이다.
요구사항
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때,
이 과학자의 H-Index를 return 하도록 solution 함수
제한사항
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다
입출력
이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다
그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3
풀이과정
h번 이상 인용된 논문이 h편 이상된 것을 if citiations[i] >=l-i return l-i 로 표현하는 것이다.
결국 citiations[i]는 논문이 i번 인용된 횟수이고, l-i는 인용된 논문의 개수를 점점 줄여나가는 것이다.
결과
뭔가 할 수 있을것 같은데 결국 포기하고 구글링해서 참고했다.
def solution(citations):
citations.sort()
l=len(citations)
for i in range(l):
if citations[i]>= l-i:
return l-i
return 0
먼저 가장 큰 수를 리턴해야하기 때문에 배열을 오름차순으로 정렬하면 [0, 1, 3, 5, 6]이 되고 길이인 l = 5가 된다.
for문을 돌아가며 이해해보자.
i=0, citations[0] >= l-i 즉, 0>=5-0 -> false로 다음
i=1, citations[1] >= l-i 즉, 1>=5-1 -> false로 다음
i=2, citations[2] >= l-i 즉, 3>=5-2 -> true로 결국 3을 리턴한다.
l은 고정길이지만 i가 점점 커질테니까 l-i를 통해서 점점 범위를 좁혀나간다.
배운점
- len(배열)-인덱스 : i인덱스 값과 같거나 큰 수의 개수를 뽑을때
참고
'코딩 테스트' 카테고리의 다른 글
[Python] 코딩테스트 고득점Kit | 완전탐색3-카펫 (0) | 2021.05.26 |
---|---|
[Python] 코딩테스트 고득점Kit | 완전탐색2-소수찾기 (0) | 2021.05.26 |
[Python] 코딩테스트 고득점Kit | 완전탐색1-모의고사 (0) | 2021.05.26 |
[Python] 코딩테스트 고득점Kit | 정렬2-가장 큰 수 (0) | 2021.05.25 |
[Python] 코딩테스트 고득점Kit | 정렬1 - K번째수 (0) | 2021.05.25 |
[Python] 코딩테스트 고득점Kit | 해시3- 위장 (0) | 2021.05.18 |