본문 바로가기
코딩 테스트

[Python] 코딩테스트 고득점Kit | 정렬3 H-index

by 카프리썬_ 2021. 5. 25.
728x90

아래의 문제는 프로그래머스 코딩테스트 고득점 Kit 내용이며 코드는 직접 푼 내용입니다.


H-index

문제상황

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. H-index를 나타내는 값인 h를 구하라.

어떤 과학자가 발표한 논문 n편 중,

h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index이다.

 

요구사항

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때,

이 과학자의 H-Index를 return 하도록 solution 함수

 

제한사항

  • 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
  • 논문별 인용 횟수는 0회 이상 10,000회 이하입니다

입출력

이 과학자가 발표한 논문의 수는 5편이고, 그중 3편의 논문은 3회 이상 인용되었습니다

그리고 나머지 2편의 논문은 3회 이하 인용되었기 때문에 이 과학자의 H-Index는 3


풀이과정

h번 이상 인용된 논문이 h편 이상된 것을 if citiations[i] >=l-i return l-i 로 표현하는 것이다. 

결국 citiations[i]는 논문이 i번 인용된 횟수이고, l-i는 인용된 논문의 개수를 점점 줄여나가는 것이다.

 

 

결과

뭔가 할 수 있을것 같은데 결국 포기하고 구글링해서 참고했다. 

def solution(citations):
    citations.sort()
    l=len(citations)
    for i in range(l):
        if citations[i]>= l-i:
            return l-i
    return 0

먼저 가장 큰 수를 리턴해야하기 때문에 배열을 오름차순으로 정렬하면 [0, 1, 3, 5, 6]이 되고 길이인 l = 5가 된다.

for문을 돌아가며 이해해보자.

i=0, citations[0] >= l-i 즉, 0>=5-0 -> false로 다음

i=1, citations[1] >= l-i 즉, 1>=5-1 -> false로 다음

i=2, citations[2] >= l-i 즉, 3>=5-2 -> true로 결국 3을 리턴한다. 

l은 고정길이지만 i가 점점 커질테니까 l-i를 통해서 점점 범위를 좁혀나간다.

 

배운점

  • len(배열)-인덱스 : i인덱스 값과 같거나 큰 수의 개수를 뽑을때 

 


참고 

참고한 블로그 링크 : https://velog.io/@jiffydev/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-89-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-H-Index

반응형