본문 바로가기
Coding Test/Sorting

[Sorting] H-Index

by Hwanin99 2024. 6. 13.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

k(=h) s ≥ k(=h)
1번 이상인 논문이 4편 ≥ 1
2번 이상인 논문이 3편 ≥ 2
3번 이상인 논문이 3편 ≥ 3
4번 이상인 논문이 2편 < 4
5번 이상인 논문이 2편 < 5
  • k(=h)가 s 초과일 때 종료, 이전 k값이 h-index이다.

코드 1 (실패)

def solution(citations):
    n = len(citations)
    ans = []
    s=0
    h = [i+1 for i in range(n)]

    for k in h:
        s=0
        for i in citations:
            if i >= k:
                s+=1
        if s<k:
            return k-1
            break
k    1 1 1 1 1
i    3 0 6 1 5     i >= k일 때, s = 4

k    2 2 2 2 2
i    3 0 6 1 5     i >= k일 때, s = 3

k    3 3 3 3 3
i    3 0 6 1 5     i >= k일 때, s = 3

k    4 4 4 4 4
i    3 0 6 1 5     i >= k일 때, s = 2

k    5 5 5 5 5
i    3 0 6 1 5     i >= k일 때, s = 2

코드 1의 반례

  • citations = [100,100,100]인 경우에 s ≥ k인 상태로 끝나 빈 리스트만 출력된다.

코드 2 (성공)

def solution(citations):
    n = len(citations)
    ans = []
    s=0
    h = [i+1 for i in range(n)]

    for k in h:
        s=0
        for i in citations:
            if i >= k:
                s+=1
        if s<k:
            ans.append(k-1)
            break

        else:  # 위의 반례를 방지하기 위해 추가.
            ans.append(k) 

    return ans[-1]  # 반례의 경우에는 k가 계속 추가되다가 끝나기에 마지막 값을 출력

 

'Coding Test > Sorting' 카테고리의 다른 글

[Sorting] 가장 큰 수  (0) 2024.06.13
[Sorting] K번째 수  (0) 2024.06.13
Sorting 개념  (0) 2024.06.13