-
[프로그래머스]H-index📜파이썬/알고리즘 공부 2021. 11. 4. 01:06728x90

H-index
❓문제 설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
➰제한사항
- ✔과학자가 발표한 논문의 수는 1편 이상 1000편 이하입니다.
- ✔논문별 인용 횟수는 0회이상 10000회 이하입니다.
➰입출력 예
citations return [3, 0, 1, 6, 5] 3 ➰입출력 예 설명
이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.
참고자료 https://en.wikipedia.org/wiki/H-index "위키백과" ↩
➰문제 접근방식
위에 있는 참고자료는 영어로 되어있고 읽기 싫게 생겨서 h-index가 무엇인지 알아보던 중 쉽게 우리가 구하고자 할 때 필요한 개념만 담긴 블로그를 찾을 수 있었다
https://www.ibric.org/myboard/read.php?Board=news&id=270333
일단 코드로 풀어보기 전 h-index가 무엇인지에 대해서 알고 가보자~
✔H-index란?
H-지수는 특정 연구원의 연구 성과를 평가하기 위한 지표로써, 발표한 논문수와 피인용수를 이용하여 보다 객관적으로 학문적 역량을 측정할 수 있습니다. H-지수는 개인뿐만 아니라 연구단체, 기관 또는 국가의 연구 성과를 측정하는 데에도 활용되고 있습니다.
✔H-지수 구하는 방법
나의 h는 어떻게 구할 수 있을까? 우측의 표와 같이 자신이 저널에 등재한 전체 논문중 많이 인용된 순으로 정렬한 후(내림차순 정렬함수에 reverse=True 사용해보면 어떨까?라는 추측가능), 피인용수가 논문수와 같아지거나 피인용수가 논문수보다 작아지기 시작하는 숫자가 바로 나의 h가 됩니다. 이 표에서는 10이 H-지수가 되는 것입니다. 다시 말하여, 이 연구원은 논문 인용횟수가 10이 넘는 논문이 적어도 10편이 된다는 것을 의미합니다.
✔그림 예시
피인용수(# of Citation) 논문 수(No.) 47 1 42 2 32 3 28 4 24 5 22 6 17 7 15 8 10 9 10 10 8 11 위에 참고자료와 그림을 보면 어느정도 아 이게 h-index구나라는 감은 잡을 수 있을것이다. 개념만 이해하면 코드 구성에는 크게 어려움이 없을 거 같다. 만약에 피인용수가 논문 수 보다 끝까지 작지 않다면 피인용수의 len()값을 반환해 주면 되지 않을까? 라는 형식으로 접근을 해 줄 수 있을 거 같다.
💢코드
def solution(citations): # 위에 h지수 구하는 방법에서 접근했던 방식 citations.sort(reverse=True) for idx , citation in enumerate(citations): #인덱스가 피인용수보다 클 경우 if idx >= citation: #그 인덱스 반환 return idx #계속해서 피인용수가 인덱스 보다 클 경우 모두가 h-index이므로 citations의 길이를 반환 return len(citations) citations = [3, 0, 6, 1, 5 ] print(solution(citations))'파이썬 > 알고리즘 공부' 카테고리의 다른 글
[백준] 유기농배추 🥬 (0) 2021.11.16 [백준] 태권왕🦿 (0) 2021.11.03 [python] 프로그래머스 K번째 수 🖖 (0) 2021.10.28 [python] 🏑프로그래머스 조이스틱 🏑 (0) 2021.10.27 [python] 🚨 다이나믹 프로그래밍 (0) 2021.10.26