반응형
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
풀이
일단 입력으로 받은 배열을 내림차순으로 정렬한다. 그 후 인용 횟수로 따졌을 때의 최댓값(citationRes)과 논문의 개수로 따졌을 때의 최댓값(countRes)을 나눠서 최댓값을 구했다.
예를 들어 입력으로 [5, 5, 5, 9]가 주어지면 [9, 5, 5, 5]로 정렬하고 앞에서부터 for문을 통해 현재 논문의 인용 횟수와 지금까지 살펴본 논문의 개수를 카운트한다. for문을 돌면 다음과 같은 순서로 체크한다.
-> (9, 1) (5, 2) (5, 3) (5, 4) 표기 : (citation, count)
위의 예제는 인용 횟수로 따졌을 때는 값이 변하지 않는다. 총 논문이 4개 뿐이기 때문에 9(또는 5)번 이상 인용된 논문이 9(또는 5)편 이상이 될 수 없기 때문이다. 하지만 논문의 개수로 따지면 마지막 (5,4)에서 4번 이상 인용된 논문이 4편 이상임을 만족하기 때문에 h-index의 최댓값이 4가 된다는 것을 구할 수 있다.
이와 같이 citationRes와 countRes를 구한 후 둘 중에 가장 큰 값을 return 하면 된다.
코드
def solution(citations):
citationRes = 0 # 인용 횟수로 따졌을 때의 최댓값
countRes = 0 # 지금까지 살펴본 논문의 개수로 따졌을 때의 최댓값
citations.sort(reverse=True)
count = 0 # 현재까지 살펴본 논문의 개수
for citation in citations:
count += 1
# (1)만약 현재 논문의 인용됫 횟수(citation)보다 현재까지 살펴본 논문의 개수(count)가 크거나 같으면
# citationRes를 갱신
# (2)만약 현재까지 살펴본 논문의 개수(count)가 현재 논문의 인용된 횟수(citation) 보다 크면
# countRes를 갱신
if count >= citation:
citationRes = citation
elif citation > count:
countRes = count
if citationRes != 0 and countRes != 0:
break
return max(citationRes, countRes)
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[2020 카카오 인턴십] 수식 최대화 (0) | 2022.05.05 |
---|---|
[2020 카카오 인턴십] 키패드 누르기 (0) | 2022.05.05 |
[고득점 Kit(정렬)] 가장 큰 수 (Swift, Python) (0) | 2022.02.03 |
[고득점 Kit(힙)] 이중우선순위큐 (Python) (0) | 2022.01.29 |
[고득점 Kit(힙)] 디스크 컨트롤러 (Swift, Python) (0) | 2022.01.28 |
댓글