코딩테스트

[프로그래머스] H-Index - Lv.2

pyflu 2024. 1. 10. 20:34

프로그래머스 42747번 문제 "H-Index" Lv.2 - 파이썬, 자바, 코틀린

[프로그래머스] H-Index Lv.2 - [파이썬/python] [자바/java]

 

 

프로그래머스-H-Index


💻 문제 설명

 

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

 

 




!!!정답 주의!!!




 

 

 


🌟 소스 코드

[Python] 파이썬 코드

프로그래머스-H-Index-파이썬-코드

def solution(citations):
   
    citations.sort(reverse=True)
    h = 0
   
    # h번 인용된 논문이 h편 이상일 때
    # h의 값은 무조건 (0 ~ citations.length) 이다.
       
    # [9, 7, 6, 5, 1, 0]의 리스트을 순회하면
    # 9(h)번 이상 인용된 논문은 1(h)편 이상이다. -> h = 1
    # 7(h)번 이상 인용된 논문은 2(h)편 이상이다. -> h = 2
    # 6(h)번 이상 인용된 논문은 3(h)편 이상이다. -> h = 3
    # 5(h)번 이상 인용된 논문은 4(h)편 이상이다. -> h = 4 -> 제일 큰 h
    # 1(h)번 이상 인용된 논문은 5(h)편 이상이다. -> h = 1
    # 0(h)번 이상 인용된 논문은 6(h)편 이상이다. -> h = 0
       
    # 문장마다 있는 두개의 h중 작은값이 결국 진짜 h가 된다.
    # 결국 리스트를 순회하여 구한 h중에서 최댓값 구하면 된다.
    for h_count, i in enumerate(citations, start=1):
       
        h = max(h, min(h_count, i))
   
    return h

 

 

 

[Java] 자바 코드

프로그래머스-H-Index-자바-코드

import java.util.Arrays;

 

    class Solution {

        public int solution(int[] citations) {

 

        Arrays.sort(citations);

        int ll = citations.length;

        int h = 0;

 

        // h번 인용된 논문이 h편 이상일 때

        // h의 값은 무조건 (0 ~ citations.length) 이다.

 

        // [9, 7, 6, 5, 1, 0]의 배열을 순회하면

        // 9(h)번 이상 인용된 논문은 1(h)편 이상이다. -> h = 1

        // 7(h)번 이상 인용된 논문은 2(h)편 이상이다. -> h = 2

        // 6(h)번 이상 인용된 논문은 3(h)편 이상이다. -> h = 3

        // 5(h)번 이상 인용된 논문은 4(h)편 이상이다. -> h = 4 -> 제일 큰 h

        // 1(h)번 이상 인용된 논문은 5(h)편 이상이다. -> h = 1

        // 0(h)번 이상 인용된 논문은 6(h)편 이상이다. -> h = 0

 

        // 문장마다 있는 두개의 h중 작은값이 결국 진짜 h가 된다.

        // 결국 배열를 순회하여 구한 h중에서 최댓값 구하면 된다.

        for(int i=0; i<ll; i++){

            h = Math.max(h, Math.min(citations[i], ll-i));

        }

 

        return h;

    }

}

 

 

 


🏳‍🌈 테스트 결과

 

프로그래머스-H-Index-상태

 

[Python] 파이썬 - 테스트 결과 [Java] 자바 - 테스트 결과
프로그래머스-H-Index-파이썬-테스트-결과
프로그래머스-H-Index-자바-테스트-결과

 

 

728x90