문제 링크 >> https://programmers.co.kr/learn/courses/30/lessons/42747
📋 문제
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다.
위키백과에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
👉 입출력
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
📝 풀이
❌ 첫 번째 풀이
def solution(citations):
count = {}
for i in sorted(citations)[:int(len(citations)/2)+1]:
count[i]=list(filter(lambda x: x>=i, citations))
result = [k for k, v in count.items() if k <= len(v)]
answer = max(result)
return answer
입력으로 주어진 citations 배열을 오름차순으로 정렬한 뒤 절반만을 순회하며 해당 원소보다 같거나 큰 값만을 count에 저장했다.
그러면 count에는 인용된 횟수가 key로, 해당 횟수보다 같거나 큰 횟수가 value로 저장된다.
그리고 다시 count 딕셔너리를 순회하면서 key보다 인용된 횟수가 더 많은 것만 골라 result에 담고 result에서 최대값을 출력하도록 했다.
결과는 테스트케이스 2개 빼고 모조리 전멸!
✔️ 두 번째 풀이
def solution(citations):
citations.sort(reverse=True)
answer = [0]
for i in range(1,len(citations)+1):
if citations[i-1] >= i:
answer.append(i)
return max(answer)
H-index를 구한다는 게 어떻게 구해지는 건지 이해가 가지 않아서 H-index의 개념을 먼저 살펴봤다.
그러다 쉽게 이해할 수 있는 글을 찾았는데 그에 따르면 H-index는 다음과 같다.
H-지수 구하는 방법
나의 h는 어떻게 구할 수 있을까? 우측의 표와 같이 자신이 저널에 등재한 전체 논문중 많이 인용된 순으로 정렬한 후, 피인용수가 논문수와 같아지거나 피인용수가 논문수보다 작아지기 시작하는 숫자가 바로 나의 h가 됩니다. 이 표에서는 10이 H-지수가 되는 것입니다. 다시 말하여, 이 연구원은 논문 인용횟수가 10이 넘는 논문이 적어도 10편이 된다는 것을 의미합니다.
즉, H-index를 구하는 방식은 논문이 많이 인용된 순으로 정렬한 후 피인용수가 논문 수와 같아지거나 피 인용수가 논문 수보다 작아지기 시작하는 수를 구하는 것이다.
따라서 입력으로 주어진 citations를 내림차순으로 정렬한 뒤 논문 수와 피인용수를 비교하며 피인용수가 논문 수보다 크거나 같은 값을 answer 배열에 담아준다.
그리고 answer의 요소 중 최댓값을 리턴하면 된다.
🔍 참조
H-지수(H-Index) 란 무엇인가? https://www.ibric.org/myboard/read.php?Board=news&id=270333
'Algorithm > Python' 카테고리의 다른 글
[백준2805번] 나무 자르기 (0) | 2022.02.03 |
---|---|
[백준4673번] 셀프 넘버 (0) | 2022.02.03 |
[프로그래머스] 가장 큰 수 (0) | 2022.02.02 |
[프로그래머스] K번째 수 (0) | 2022.02.02 |
[LeetCode] Longest Word in Dictionary (0) | 2022.01.31 |
댓글