SOGM'S Data

프로그래머스/정렬/H-INDEX - 파이썬(python) 본문

About CS/Coding Test Review

프로그래머스/정렬/H-INDEX - 파이썬(python)

왈왈가부 2022. 3. 24. 00:05

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회 이하입니다.

입출력 예

citation return
[3, 0, 6, 1, 5] 3

 

<입출력 해석>

어떤 한 과학자는 5편의 논문을 썼으며, 인용횟수는 각각 [3, 0, 6, 1, 5]입니다. 

(첫 번째 조건)  h번 이상 인용된 h편 이상의 논문

(두 번째 조건)  나머지 논문은 h번 이하로 인용되어야한다.   

h = 0 일때,

(첫 번째 조건) 인용횟수>= 0인 논문의 수는 [0,1,3,5,6] 0개이상, (두 번째 조건) 나머지(없음) 논문 인용횟수<=1 ->실패

h = 1 일때, 

(첫 번째 조건) 인용횟수>= 1인 논문의 수는 [1,3,5,6] 1개이상, (두 번째 조건) 나머지  [0]  논문은 인용횟수<=1 ->성공

h = 2 일때,

(첫 번째 조건) 인용횟수>= 2인 논문의 수는 [3,5,6] 2개이상, (두 번째 조건) 나머지  [0,1]  논문은 인용횟수<=2 ->성공

h = 3 일때,

(첫 번째 조건) 인용횟수>= 3인 논문의 수는 [3,5,6] 3개이상, (두 번째 조건) 나머지  [0,1]  논문은 인용횟수<=3 ->성공

h = 4일때,

(첫 번째 조건) 인용횟수>= 4인 논문의 수는 [5,6] 4개이상, (두 번째 조건) 나머지  [0,1,3]  논문은 인용횟수<=4 ->실패

 

 두 가지 조건이 모두 충족되는 가장 큰 h = 3 

 

 

<해결방법>

n개의 논문의 인용횟수 X로 내림차순한 리스트를 표현하면  X= [x0,x1,x2,...,xn]  x0>x1>x2...>xn 

논문은 x0->xn ,  h는 0->n (1단위씩 증가)하면서 1:1매칭하며 확인.

논문의 리스트가 인용횟수 내림차순 정렬이기때문에 (h번째 매칭턴에서) h >= xh 되는순간

 나머지 xh+1~xn은 xh와 매칭되는 h보다 작거나 같음(두 번째 조건이 충족) 

 0~h-1번째 매칭턴에서 매칭된 논문들(x1,x2...xh-1) 은 반드시  xh보다 크거나 같음.(첫 번째 조건이 충족) 

즉 이때의 h값이 h-index가 됨. 

 

    citations.sort(reverse=True)
    # 주의) sorted(list, reverse=True)의 경우 원본 리스트 정렬이 아닌 변수를 따로 지정해줘야함
    # ex) list_sorted = sorted(listm reverse=True)
    
    #결과> [6,5,3,1,0]

 

파이썬 내장함수 enumrate 활용하여 붙여줌 .

합치면 , 

#citations =[3,0,6,1,5]

def solution(citations):
    citations.sort(reverse=True)
    #citations =[6,5,3,1,0]
    
    for i , citation in enumerate(citations):
    # 1st  0,6
    # 2nd  1,5 
    # 3rd  2,3
    # 4th  3,1
    
        if i >= citation:
          #i=3     citation=1 
            return i
             # i = 3 
    return len(citations)
    # 만약 한편의 논문만 냈다면 h-index는 1이됨. (한 편만 냈으므로)

 

'About CS > Coding Test Review' 카테고리의 다른 글

백준/ 1260번/ dfs와 bfs [python]  (0) 2020.12.31
Comments