본문 바로가기

자료구조 & 알고리즘

[프로그래머스] H-Index

최근에 퀵소트를 다시 구현해 써보고 싶어서 정렬 문제를 풀어보았다. 근데 이 문제는 굳이 퀵소트를 할 필요 없을거 같아서 간단하게 java.util.Arrays 의 sort를 사용해서 정렬해 보았다.

이 문제의 관건은 문제를 읽고 h-index를 제대로 파악해 조건 문을 만드는것이다. 졸리고 머리가 아팠다.

이 문제를 해결하지 못하신분은 저처럼 h-index를 잘못 이해 했었을거라 생각이 듭니다...

 

 

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        int n = citations.length;
        int h = 0;
        int i = 0;
        Arrays.sort(citations);
        // [22, 42]  2
        while(h<=n){
            if(citations[i] >= h && n-i>=h) answer=h;
            else i++;
            h++;
        }

        return answer;
    }
}

 

코드 설명)

 

우선은 citations를 정렬해주면 논문이 인용된 횟수에 따라 정렬됩니다.

 

while 문 부터가 포인트 입니다. 머리가 잘 돌질 않아서 생각하기 편하게 문제에 있는 n(총 논문 수) ,h 값을 변수로 선언했고 h값을 0부터 n까지 증가 시키며 조건에 부합한지 체크했습니다. (조건에 따르면 h값은 n 값을 넘을수 없습니다.) 현재 인덱스(citations[i])에서의 값(인용된 횟수)이 h이상이 아니라면 i의 값을 증가시켜 다음 논문의 인용수를 체크합니다.

h가 문제의 조건에 부합할 경우 h값을 증가시키고 반복합니다. h가 h-index 조건에 맞을 경우 answer에 h값을 넣어줍니다. answer에는 점차 커지는 h의 값만이 들어 가므로 따로 최대값을 구할 필요 없습니다.