[프로그래머스]H-Index(Level2)

📝문제 링크

프로그래머스 > 정렬 > H-Index 문제보기

🔑문제 KeyPoint

H-Index에 대한 설명만 잘 이해한다면, 문제는 쉽게 풀 수 있다.

우선, 문제 설명에 나온대로 오름차순 정렬을 이용하여 현재 index의 값과 배열의 남은 길이가 같으면 답이라고 생각하였다.

이렇게 풀면, H-Index를 잘못이해하고 푼 풀이이다.
H-지수(H-Index)란 무엇인가? 에 대한 내용을 보고 다시 이해하였다.

내림차순으로 정렬한 뒤,
피인용수 <= 논문을 인용한 수에 대한 조건만 세워주면 된다.
(단, 이렇게 접근하면 딱 한문제가 틀린다.)

💡 피인용수가 논문을 인용한 수와 같아질수 없는 경우,
피인용수 < 논문을 인용한 수가 작은 케이스만 체크해주면 된다.

💻문제 풀이

public int solution(int[] citations){
    int answer = 0;
    int len = citations.length;
    int cnt = 0;

    // 내림차순 정렬
    Integer[] array = Arrays.stream( citations ).boxed().toArray( Integer[]::new );
    Arrays.sort(array, Collections.reverseOrder());

    for(int i=0;i<array.length;i++){
        int h = array[i];
        cnt ++;

	// 위에서 말한 조건대로,
   	// 피인용수 <= 논문을 인용한 수
        if(h <= cnt ){
            answer = Math.max(i,answer);
            break;
        }else{
            // 피인용수보다 논문수가 작은 경우
            // ex) [5] => 1 || [22,42] => 2
            if(i == len-1 && answer == 0 ){
                answer = cnt;
            }
        }
    }
    return answer;
}

전체 소스보기(git)

좋은 웹페이지 즐겨찾기