[pro] H-Index

letsbebrave·2022년 5월 3일
0

codingtest

목록 보기
129/146
post-thumbnail

문제링크

https://programmers.co.kr/learn/courses/30/lessons/42747

잘못 생각한 것

처음엔 citation 인용 횟수만 고려하여 코드를 짰으나, 이렇게 하면 중간에 있는 값들을 고려해줄 수 없다. 예를 들어,

[20, 19, 18, 1] 의 인용 횟수가 있을 경우

n회 n편(h)
20 [20]
19 [20, 19]
18 [20, 19, 18]
...
1 [20, 19, 18]

이 경우 논문 편수가 3으로 h가 고정되게 되므로 h보다 큰 것을 찾으면 3회가 답안이 되어야 하나, citations 만으로 고려되면 1이 답이 된다. 이는 18과 1 사이의 값을 체크하지 않아서 그렇다..

그래서 전체를 탐색해주는 것으로 방향을 바꿨다.

정답풀이

def solution(c):
    c = sorted(c, reverse = True)
    
    '''
    i는 논문 편수
    j는 논문이 인용된 횟수
    n편 중, h번 이상 인용된 논문이 h편의 이상이어야 하므로
    논문의 인용 횟수가 h번 이상 인 것들의 갯수 >= h
    '''
    for i in range(max(c), -1, -1):
        temp = []
        for j in c:
            if j >= i: # citations >= 현재값 
            #ex. 18이 현재값일 경우, temp에 [20, 19, 18]을 담아줌
                temp.append(j)
        if len(temp) >= i: # 3 >= 현재값이면 현재값 리턴해줌
            return i
profile
그게, 할 수 있다고 믿어야 해

0개의 댓글