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 문제는 구현을 하는 시간보다 이해를 하는 시간이 더 오래걸렸습니다. 문제를 보고 곧장 푸는 것보다 해결 과정에서 보인 것처럼 각 과정에서 값이 어떻게 변하는지 확인하면 더 빠르게 이해를 하고 문제를 해결했을 것 같습니다.
'📦 아카이브' 카테고리의 다른 글
프로그래머스 76502 괄호 회전하기 (0) | 2022.07.28 |
---|---|
프로그래머스 42583 다리를 지나는 트럭 (0) | 2022.07.22 |
프로그래머스86971 전력망 둘로 나누기 (0) | 2022.07.19 |
연결리스트는 뭐야? (0) | 2022.07.08 |
큐는 뭐야? (0) | 2022.07.05 |
댓글