알고리즘
[프로그래머스][정렬]H-Index
띵유
2020. 9. 6. 18:13
반응형
문제요약 : n 편의 논문중 h 번 이상 인용된 논문의 개수가 h개이상일때, h의 최댓값이 H-Index가 됨
내 풀이
def count(c_list, num):
cnt=0
for i in c_list:
if i>=num:
cnt+=1
return cnt
def solution(citations):
answer = 0
citations=sorted(citations, reverse=True)
for i in range(max(citations)):
if max(citations)-i<=count(citations,max(citations)-i):
answer=max(citations)-i
break
return answer
- count 함수는 논문중 num개 이상 인용된 논문의 개수를 count
- citation 의 최댓값부터 H-Index인지 검사한다.
- max(citations) - i : h 값
h개 이상 인용되었으면 해당 값이 answer이 됨
h-Index는 무조건 논문 인용된 수 중 하나여야하는줄 알고 헷갈렸다. (citations 원소중 하나가 답이여야하는줄 암)
그렇게 푸니 11번 16번 case만 정답이고 나머진 틀림ㅋㅋ
다른사람 풀이1
def solution(citations):
citations = sorted(citations)
l = len(citations)
for i in range(l):
if citations[i] >= l-i:
return l-i
return 0
- 정렬을 한 뒤에 citations[i] >= l -i를 통해 조건을 걸면 count함수를 굳이 만들 필요가 없다.
정렬을 했으면 당연히 i 보다 뒤에 있는 원소들은 i번째보다 더 인용횟수가 많음.
즉, citations[i]= i번째 인용횟수,
l-i = citations[i] 이상의 인용 횟수를 가지는 논문 수
다른사람 풀이2
def solution(citations):
citations.sort(reverse=True)
answer = max(map(min, enumerate(citations, start=1)))
return answer
반응형