algorithm/프로그래머스

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

자바왕세자 2020. 7. 12. 23:13

문제

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

 

코딩테스트 연습 - H-Index

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

programmers.co.kr

 

접근법

두가지의 방식으로 풀었다.
첫 번째 방식은 직관적으로 이중포문을 사용하여서 풀었다.
배열의 수를 정렬하고 큰 수부터 차례로 조건과 비교해나가면서 연산하였다.

두 번째 방식은 좀 더 규칙을 찾는데에 힘을 썼다.
첫 번째 방식과 마찬가지로 먼저 정렬을 하였다.
그 후 큰 수부터 차례로 비교하는데 h값은 점점 작아지고, 그에 맞춰 h보다 큰 값의 개수는 늘어나게 된다.
h값은 감소하고, h보다 큰값은 증가하는데 두 값이 교차하는 순간이 조건에 부합하는 순간이다.

 

코드


첫 번째 방식

import java.util.Arrays;

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

        Arrays.sort(citations);

        int max = citations[citations.length-1];

        while(max >= 0){
            int cnt = 0;
            for(int i=citations.length-1;i>=0;i--){
                if(max <= citations[i])
                    cnt++;
                else
                    break;
            }
            if(cnt >= max && citations.length-max <= max) {
                answer = max;
                break;
            }

            max--;

        }


        return answer;
    }
}

 

두 번째 방식

import java.util.Arrays;

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;
    }
}