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

최대 1 분 소요

문제 링크

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


풀이 과정

http://dl.dropbox.com/s/2r470mlhftx9d7i/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-42747_H-Index-1.png

문제 이해가 잘 안되서 H-Index란? 를 참고했습니다.

논문의 인용 수를 기준으로 내림차순으로 정렬하고, 배열의 요소 값이 인덱스보다 같거나 작아지는 순간의 인덱스가 H-Index가 됩니다.

citations : [3, 0, 6, 1, 5]

http://dl.dropbox.com/s/24cvy5elvmrdr4i/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-42747_H-Index-2.png

정의에 따라 위의 예제에서는 3번 이상 인용된 논문이 3편 이상으로, 3이 H-Index가 됨을 알 수 있습니다.

citations : [31, 66]

http://dl.dropbox.com/s/hyo5r3qax1sjh4w/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-42747_H-Index-3.png

위 예제에서는 배열을 다 순회해도 수식에 맞는 값을 얻을 수 없으므로, 배열의 길이가 정답이 됩니다.


코드

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Main {
    public static int solution(int[] citations) {
        ArrayList<Integer> list = new ArrayList<>();
        for (int count : citations)
            list.add(count);

        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.intValue() - o1.intValue();
            }
        });

        int idx = 0;
        while (idx < list.size()) {
            if (list.get(idx) <= idx) break;
            idx++;
        }

        return idx;
    }

    public static void main(String[] args) {
        int[] citations = {3, 0, 6, 1, 5};
//        int[] citations = {31, 66};
        System.out.println(solution(citations));
    }
}

카테고리:

업데이트:

댓글남기기