programmers.co.kr/learn/courses/30/lessons/42747?language=python3
문제 설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
입출력 예
citationsreturn
[3, 0, 6, 1, 5] | 3 |
입출력 예 설명
이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다. 그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3입니다.
풀이
def solution(citations):
citations = sorted(citations) # 오름차순으로 정렬
for idx in range(len(citations)):
if citations[idx] >= len(citations) - idx:
return (len(citations) - idx)
return 0
문제 이해하기가 어려웠다 설명이 난해해서.
논리:
반복문 통해서 각 원소 값 확인 (cit_num만큼 돔)
max 변수 선언
count 변수 선언
temp 변수 선언 ==> 기준값
citations [0]를 처음 temp로 둠
for문을 돌면서 temp와 citations [i] 값을 비교하여 temp와 같거나
큰 값을 발견할 때마다 count ++
for문 마지막에 조건문 ==> max와 비교하여 max보다 count값이 크면
max를 count값으로 바꿔줌
그렇게 for문 다돌고 나오면 max가 최대 값이므로 이것이 H-index?
라고 초기 논리 잡음.
테스트 케이스는 통과함 제출했는데 다 실패..
놓친 특이 케이스가 있는 듯함.
==> 내가 temp 즉 기준값으로 잡은 수를 변경을 안 해줬음
그래서 무조건 처음이 기준이라 실패했다.
한번돈 값 이 값과
다음 기준값을 통해 돈 값을 비교하여 더 큰 값을 해줘야 함.
==> 또 다른 특이 케이스 발견 0으로 기준이 지정되면 다 선택
따라서 0은 제외해야함.
지문 해석을 잘못하고있었다.
h번 이상 인용된 논문이 h편 이상이고 즉 기준값을 통하여 검사한
count의 값이 그 그 기준 값보다 커야 한다는 뜻.
리스트를 오름차순으로 정렬 한 후 진행하자.
첫 번째 인덱스의 값이 논문 수 cit_num보다 크면 모든 인용
횟수가 논문 개수보다 큰 것 ==> 논문 개수 리턴
==> 지문을 잘 읽자....
'Algorithm > Online judge' 카테고리의 다른 글
[프로그래머스] 해시 > level 2 > 전화번호 목록 (0) | 2021.01.22 |
---|---|
[프로그래머스] 해시 > level 1 > 완주하지 못한 선수 (0) | 2021.01.22 |
[프로그래머스] 스택/큐 > level 2 > 다리를 지나는 트럭 (0) | 2021.01.22 |
[프로그래머스] 스택/큐 > level 2 > 프린터 (0) | 2021.01.22 |
[프로그래머스] 탐욕법(Greedy) > level 1 > 체육복 (0) | 2021.01.22 |