ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] 정렬 - H-index
    알고리즘 공부/문제 풀이 2020. 8. 6. 23:57

    문제를 처음에 보고 말이 어렵다고 생각했다.

    하지만, 막상 구현해보니 간단하게 코드를 짤 수 있었다.

     

    우선 h-index의 조건은 두 가지이다.

    1. h개 이상의 논문에 대해서

    2. h번 이상의 인용이 이루어져야한다.

     

    첫번째 조건은 index를 이용하여 충족시키도록 하였다.

    주어진 배열을 오름차순으로 정렬한 후, 큰 수부터 접근하였다.

     

     

    1,3,4,5,7 을 예시로 들어보자

     

    초기 상태는 1,3,4,5,7,*라고 생각하자. *은 현재 가리키고 있는 인덱스라고 생각하면 된다.

    당연히 h-index는 0이 될 것이다.

     

    나는 h-index를 먼저 증가시키고 위의 두가지 조건을 만족시키지 않으면 다시 감소시킨다음 return하도록 코드를 짰다

     

    따라서 h-index는 1이되고 가리키는 값은 7이 되어 1,3,4,5,7* 이 상태가 될것이다.

    후에 7과 h-index를 비교하여 h-index < 7 을 만족한다면, h-index를 또 증가시키고 위의 과정을 반복해준다.

     

    h-index=2일 때 1,3,4,5*,7 -> 2<5를 만족하므로 또 한번 반복

    h-index=3일 때 1,3,4*,5,7 조건 만족하므로 다시 반복

    h-index=4일 때 1,3*4,5,7 조건 만족하지 않으므로 h-index가 하나 줄은 3일 때가 최대 h값이 된다.

    따라서, h-index는 3이다.

     

    이 과정을 코드로 구현하면 아래와 같다.

    public class sort3 {
    	static int solution(int[] citations) {
            int answer = 0;
            
            //오름차순 정렬
            Arrays.sort(citations);
            
            //모든 논문이 인용된 횟수가 0일 경우 h-index는 0
            if(citations[citations.length-1]==0) return answer;
            
            //큰 수부터 내려오며 answer 증가 시킴
            for(int i=citations.length-1; 0<=i ;i--) {
            	answer++;
            	if(answer<=citations[i]) continue;
            	else {
            		answer--;
            		break;
            	}
            }
            
            return answer;
        }
    }

    단 모든 논문이 모두 인용되지 않은 경우 예외 처리를 해 주어야 한다.

    댓글

Designed by Tistory.