https://school.programmers.co.kr/learn/courses/30/lessons/42747
흔히 알고 있는 H-Index를 계산하는 문제입니다.
citations을 정렬하고, h를 0부터 10,000까지 반복하여 h편이상 인용된 논문 수를 c, 나머지 논문 수를 r에 저장합니다.
주어진 조건에 맞게 c >= h and r <= c를 통해 answer에 h를 저장합니다.
추가로, h값이 citations에 없는 경우가 있기 때문에 h >= citations[i]일 때만 i의 값을 1증가시킵니다.
def solution(citations):
answer = 0
citations.sort()
print(citations)
n = len(citations)
i = 0
for h in range(10001):
if i < n:
c = len(citations[i:])
r = n - c
if c >= h and r <= c:
answer = h
if h >= citations[i]:
i += 1
return answer
하지만 채점 결과에서 테스트 16을 통과하지 못 했습니다. 어떤 케이스인지 생각해보니 [0, 0]을 입력으로 받을 때, 결괏값이 1이 나왔습니다.
이를 해결하기 위해 인용된 논문 수의 합이 0일 때, 0을 반환할 수 있도록 아래와 같이 수정했습니다.
def solution(citations):
answer = 0
citations.sort()
print(citations)
if sum(citations) == 0:
return 0
n = len(citations)
i = 0
for h in range(10001):
if i < n:
c = len(citations[i:])
r = n - c
if c >= h and r <= c:
answer = h
if h >= citations[i]:
i += 1
return answer
코딩테스트 정렬 문제는 정렬할 때, 조건이 붙거나 "H-Index" 문제처럼 정렬 후 어떤 조건을 기반으로 탐색하는 유형도 많이 있습니다.
'Coding Test > Sorting' 카테고리의 다른 글
[Sorting] 가장 큰 수 (0) | 2023.09.07 |
---|