본문 바로가기
JAVA/Coding Test Study

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

by ♡˖GYURI˖♡ 2024. 4. 15.
728x90
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

처음엔 citations를 오름차순 정렬하고, for문으로 순회하면서 각각을 count하였는데 효율성에서 실패하였다.

그리고 사실 문제도 제대로 이해 못한 듯하다...

 

어떤 과학자가 발표한 논문 n편 중, h회 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었을 때, h의 최대값

을 구해야하는데 말이 좀 어려웠다.

 

참고한 블로그⬇️

 

[프로그래머스] H-Index - Java

https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키

hyojun.tistory.com

 

일단 Arrays.sort()는 맞았고, 위 블로그에 따르면 특정 인덱스 i부터 citations 배열의 길이까지만큼의 논문이 citations[i]번 이상 인용되었다고 할 수 있다고 한다.

이해가 잘 안 돼서 또 그림으로 그려보기...

 

이렇게 citations[i]에서 i값을 증가시키고 논문의 수를감소시키면서 비교했을 때 인용 횟수가 논문의 수 이상이 되었을때의 논문의 수가 답이 된다.  

 

 

문제풀이

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;

        Arrays.sort(citations);

        for (int i = 0; i < citations.length; i++) {
            int h = citations.length - i;

            if (citations[i] >= h) {
                answer = h;
                break;
            }
        }

        return answer;
    }
}

 

과정은 이해했는데 h의 정의가 아직도 좀 헷갈려서 코드도 정확히 이해하지 못했다.

독해 능력이 필요했던 문제...