띵유로그

[프로그래머스][정렬]H-Index 본문

알고리즘

[프로그래머스][정렬]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

 

반응형
Comments