본문 바로가기
Preparing Coding Test/Programmers L2

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

by weero 2020. 8. 23.

문제

https://programmers.co.kr/learn/courses/30/lessons/42747#

 

코딩테스트 연습 - H-Index

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표

programmers.co.kr

 

 

코드

단순 이중 for문 이용

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        int paper_num = citations.length;
        
        for(int i=0; i<=paper_num; i++){ // h
            int num = 0;
            for(int j=0; j<paper_num ; j++){
                if(citations[j]>=i)
                    num++;
            }
            if(num>=i)
                answer = i;
        }
        
        return answer;
    }
}

정렬이 필요 없는 방식이다.

 

코드 2

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        Arrays.sort(citations);

        int max = 0;
        for(int i = citations.length-1; i > -1; i--){
            int min = (int)Math.min(citations[i], citations.length - i);
            if(max < min) max = min;
        }

        return max;
    }
}

테스트 케이스 citations = {3, 0, 6, 1, 5}

오름차순 정렬 후, {0, 1, 3, 5, 6}

 

for문의 i는 i=4부터 i=0까지 총 5번을 반복한다.

min 변수에는 (가장 큰 원소인 6)과 (해당 원소 이상(크거나 같은) 수의 개수) 중 작은 것이 들어간다.

만약 max보다 min이 크다면 max에 min이 들어간다.

두 값의 최소값의 변화가 증가하다가 감소하는 지점을 찾는다.

 

어렵다..

 

코드 3

import java.util.*;

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

        for (int i = citations.length -1 ; i >= 0 ; i--) {
            if(citations.length -i >= citations[i])
                break;
            answer++;
        }
        
        return answer;
    }
}