문제 설명
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회 이하입니다.
입출력
citations | return |
[3, 0, 6, 1, 5] | 3 |
코드 및 설명
def solution(citations):
# 최대 논문 인용 횟수
max_citations = max(citations)
# 오름차순으로 정렬을 해서 순서대로 진행, 몇 회 인용 되었는 데, 인용된 횟수와 편의 개수가 같아야한다.
sort_citations = sorted(citations)
for idx in range(max_citations+1):
count = 0
for citation in sort_citations:
if idx < citation:
count += 1
if count == idx:
return count
return 0
이 문제는 진짜 후... 지문을 잘 읽어야한다. 처음 잘못된 방향으로 가서 엄청나게 삽질을 했다...
제일 중요한 문구는
n편 중, h번 이상 인용된 논문이 h편이상이고, 나머지 논문이 h번 이하 인용
이 부분을 잘 이해해야한다. 이걸 보면 [3, 0, 6, 1, 5] 총 5편의 논문 중 3번 이상 인용된 논문이 3편이상이고, 3번 이하 인용.
결국 몇 회 인용과 편의 개수가 같아야 답을 구할 수 있다.
일단 최대 논문 인용 횟수를 구하고, 인용 횟수만큼 for문을 돌려줄 껀데, 여기서!!!
코드를 다시 보다보니 좀 이상하더라...?
위에 껄로 코드를 하면, [3, 0, 6, 1, 5] 이걸 통과 못한다.
idx <= citation 이 부분 차이다...
이걸 idx < citation 이렇게 하면 3번이상이 나올 수가 없다. 일단 내 코드에선 그래서 수정을 좀 했다.
이렇게 짜는게 맞는 가는 음... 테스트코드도 다 통과하고, 제출도 100점이 나온다. 일단 다른 사람 풀이를 보면서
좀 더 공부해봐야겠다.
def solution(citations):
# 논문 총 편 수
len_citations = len(citations)
# 오름차순으로 정렬을 해서 순서대로 진행, 몇 회 인용 되었는 데, 인용된 횟수와 편의 개수가 같아야한다.
sort_citations = sorted(citations)
for idx in range(len_citations+1):
first_count = 0
second_count = 0
for citation in sort_citations:
if idx < citation:
first_count += 1
if idx <= citation:
second_count += 1
if first_count == idx:
return first_count
if second_count == idx:
return second_count
'삽집하는 개발들 > 알고리즘' 카테고리의 다른 글
[73일차][Lv2][프로그래머스][스택/큐][42586]기능개발 (41) | 2023.11.09 |
---|---|
[72일차][Lv2][프로그래머스][12949]행렬의 곱셈 (5) | 2023.11.06 |
[70일차][Lv2][프로그래머스][깊이/너비 우선 탐색(DFS/BFS][43165]타겟 넘버 (56) | 2023.10.28 |
[69일차][Lv2][프로그래머스][월간 코드 챌린지 시즌3][87390]n^2 배열 자르기 (60) | 2023.10.24 |
[68일차][Lv2][프로그래머스][131127]할인 행사 (37) | 2023.10.21 |