본문 바로가기
📦 아카이브

프로그래머스 42747 H-Index

by 파랭이가 룰루랄라 2022. 7. 20.

H-Index 문제에 대한 설명은 다음 링크를 확인하면 됩니다. 문제 설명

 

프로그래머스

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

programmers.co.kr

H-Index는 논문 n개 중, h번 이상 인용된 논문이 h 편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 H-Index가 됩니다.

 

처음 문제에 대한 설명을 읽었을 때 "이게 무슨 소리지?"라는 생각이 들었습니다. 이해를 더 쉽게 하기 위해서는 예시를 자세하게 봐보는 것이 도움이 되기 때문에 문제에서 예시로 제시한 입출력이 어떻게 정답을 반환하는지 알아보겠습니다.

citations = [3, 0, 6, 1, 5]
내림차순 정렬 후 진행 가정
1. 6, 1개 논문이 6회 이상 인용되었다. answer = 1
2. 5, 2개 논문이 5회 이상 인용되었다. answer = 2
3. 3, 3개 논문이 3회 이상 인용되었다. answer = 3
4. 1, 4개 논문이 1회 이상 인용되었다. answer = 3
5. 0, 5개 논문이 5회 이상 인용되었다. answer = 3

위의 과정을 통해서 H-Index의 값이 결정됩니다. citations 정보를 오름차순 정렬을 사용하여 구현할 수도 있지만 그렇다면 추가적인 배열 index의 연산이 필요하게 됩니다.

 

"1개의 논문이 6회 이상 인용되었다."에서 1은 H-Index, 6은 citation입니다. 이때 가능한 H-Index의 값은 둘 중 더 작은 값이 됩니다.

 

1번과 4번 과정을 통해서 예시로 확인해보겠습니다.

  • 1번의 경우 h-index = 1, citation = 6이다. h-index가 6인 경우는 조건을 만족하지 않는다.
  • 4번의 경우 h-index = 4, citation = 1이다. h-index가 4인 경우는 조건에 만족하지 않는다.

따라서 h-index와 citation 중에 유효한 조건을 만족하는 H-Index 값은 둘 중 작은 값이 되게 됩니다.

 

풀이 과정과 유의해야 할 조건에 따라 코드를 작성하면 다음과 같습니다.

def solution(citations):
    answer = 0
    citations.sort(reverse=True)

    for h_idx, citation in enumerate(citations):
        answer = max(answer, min(citation, h_idx + 1))
    return answer

코드에 비해 장대한 설명이 있었지만 내림차순 기준으로 배열의 인덱스와 값을 순환하며 후보가 될 수 있는 H-Index를 계산하고, 그중에 최대가 되는 answer를 구하면 됩니다.

 

H-Index 문제는 구현을 하는 시간보다 이해를 하는 시간이 더 오래걸렸습니다. 문제를 보고 곧장 푸는 것보다 해결 과정에서 보인 것처럼 각 과정에서 값이 어떻게 변하는지 확인하면 더 빠르게 이해를 하고 문제를 해결했을 것 같습니다.

댓글