๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค[Java] - H-Index(์ •๋ ฌ)

by ์ฃผ๋ฐœ2 2020. 12. 5.
๋ฐ˜์‘ํ˜•

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - H-Index

H-Index๋Š” ๊ณผํ•™์ž์˜ ์ƒ์‚ฐ์„ฑ๊ณผ ์˜ํ–ฅ๋ ฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. ์–ด๋Š ๊ณผํ•™์ž์˜ H-Index๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’์ธ h๋ฅผ ๊ตฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์œ„ํ‚ค๋ฐฑ๊ณผ1์— ๋”ฐ๋ฅด๋ฉด, H-Index๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๊ณผํ•™์ž๊ฐ€ ๋ฐœํ‘œ

programmers.co.kr

์ฝ”๋“œ

import java.util.Arrays;

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

        Arrays.sort(citations);
        int max = max(citations);

        for (int i = 0; i < max; i++) {
            int higherThanH = 0;

            if (contains(citations, i)) {
                higherThanH = 1;
            }

            for (int j = 0; j < size; j++) {
                if (citations[j] > i) {
                    higherThanH++;
                }
            }
            if (higherThanH >= i) {
                answer = i;
            }
        }

        return answer;
    }

    private static int max(int[] arr) {
        return arr[arr.length - 1];
    }

    private static boolean contains(int[] arr, int element) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == element) {
                return true;
            }
        }
        return false;
    }
}

 

ํ’€์ด

๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ๋„ ์‹œ๊ฐ„์ด ๊ฝค ๊ฑธ๋ฆฐ๊ฒƒ ๊ฐ™๋‹ค...

 

์ผ๋‹จ ๋ฌธ์ œ ๋ถ„๋ฅ˜๊ฐ€ ์ •๋ ฌ์ด์–ด์„œ, ์ •๋ ฌ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ’€์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

 

์–ด๋–ค ๊ณผํ•™์ž๊ฐ€ ๋ฐœํ‘œํ•œ ๋…ผ๋ฌธ n ํŽธ ์ค‘, h๋ฒˆ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ์ด h ํŽธ ์ด์ƒ์ด๊ณ , ๋‚˜๋จธ์ง€๋Š” h๋ฒˆ ์ดํ•˜ ์ธ์šฉ => h์˜ ์ตœ๋Œ“๊ฐ’

 

์œ„ ๋ง์ด ์‚ฌ์‹ค ๊ต‰์žฅํžˆ ํ—ท๊ฐˆ๋ ธ๋‹ค... ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด(citations)์„ ์ •๋ ฌํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

์œ„ ๋ฐฐ์—ด์—์„œ ๋…ผ๋ฌธ์˜ ์ˆ˜(n)๋Š” ์ด 5ํŽธ์ด๊ณ , 3์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜๋ฉด (h = 3)

3๋ฒˆ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ = 3 , ๋‚˜๋จธ์ง€๋Š” 3๋ฒˆ ์ดํ•˜ ์ธ์šฉ(์ •๋ ฌ์„ ํ†ตํ•ด ์ด๋ถ€๋ถ„์€ ํ•ญ์ƒ True) ์œผ๋กœ ๋งŒ์กฑํ•ด์„œ H-Index๋Š” 3์ด๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•ด์•ผ ํ• ์ ์ด, H-Index์˜ ํ›„๋ณด๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋Š” ๋ฐฐ์—ด์— ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ „๋ถ€๋Š” ์•„๋‹ˆ๋‹ค.

 

 

 

๋งŒ์•ฝ ์œ„์™€ ๊ฐ™์ด citations์˜ ๋ฐฐ์—ด์˜ ์ •๋ ฌ์ด 0, 1, 3, 5, 6, 7, 8 ์ผ ๊ฒฝ์šฐ ์ตœ๋Œ“๊ฐ’์€ 3์ด ๋ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐ์„ ํ–ˆ์ง€๋งŒ,

๋ฐฐ์—ด์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” 4๋ฅผ ๋Œ€์ž…ํ•ด๋ณด๋ฉด 4ํŽธ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ์ด 4๊ฐœ(5, 6, 7, 8) ์ด๋ฏ€๋กœ

H-Index๋Š” 4๊ฐ€ ๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ h๋ฒˆ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ์„ ํŒ๋‹จํ•  ๋•Œ๋Š”, ๋ฐฐ์—ด์˜ ์ตœ์†Ÿ๊ฐ’ ~ ๋ฐฐ์—ด์˜ ์ตœ๋Œ“๊ฐ’ ๊นŒ์ง€์˜ ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ H-Index๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๋…ผ๋ฌธ๋ณ„ ์ธ์šฉ ํšŸ์ˆ˜๋Š” Max๊ฐ€ 10,000ํšŒ ์ด๋ฏ€๋กœ ์™„์ „ํƒ์ƒ‰์„ ํ•˜๋”๋ผ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

์ฝ”๋“œ ํ’€์ด

 - ๋จผ์ € ๋ฐฐ์—ด์˜ ์ •๋ ฌ๊ณผ, ๋ฐฐ์—ด์—์„œ ์ตœ๋Œ“๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

        Arrays.sort(citations);
        int max = max(citations);
        
        private static int max(int[] arr) {
            return arr[arr.length - 1];
        }

 

 - ๊ทธ ํ›„ ์ฝ”๋“œ์—์„œ h ๋ฒˆ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ์—์„œ h์˜ ๊ฐ’์„ for๋ฌธ์˜ ๋ณ€์ˆ˜์ธ i๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด, ํ˜„์žฌ ๋น„๊ตํ•˜๊ณ ์ž ํ•˜๋Š” h์˜ ๊ฐ’์ด ๋ฐฐ์—ด์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” h ๋ฒˆ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ดˆ๊ธฐ๊ฐ’์„ 0์œผ๋กœ, ๋ฐฐ์—ด์— ์กด์žฌํ• ๊ฒฝ์šฐ ์ดˆ๊ธฐ๊ฐ’์„ 1๋กœ ์„ค์ •ํ•œ๋‹ค.

            int higherThanH = 0;

            if (contains(citations, i)) {
                higherThanH = 1;
            }

 

 - ๋‹ค์Œ์œผ๋กœ ๋‚ด๋ถ€ for๋ฌธ์—์„œ ๋น„๊ตํ•  h์˜ ๊ฐ’๋ณด๋‹ค ๋ฐฐ์—ด์˜ ๊ฐ’์ด ํด ๊ฒฝ์šฐ(h๋ฒˆ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ) higherThanH +1์„ ํ•ด์ค€๋‹ค.

            for (int j = 0; j < size; j++) {
                if (citations[j] > i) {
                    higherThanH++;
                }
            }

 

- ์ตœ์ข…์ ์œผ๋กœ h๋ฒˆ ์ด์ƒ ์ธ์šฉ๋œ ๋…ผ๋ฌธ์ด h ํŽธ ์ด์ƒ์ผ ๊ฒฝ์šฐ ==> H-Index์˜ ๊ฐ’์„ ๋น„๊ตํ•œ h(for๋ฌธ์˜ i๋ณ€์ˆ˜) ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.

            if (higherThanH >= i) {
                answer = i;
            }

 

 

 

 

 

๋‹ค๋ฅธ ์ฝ”๋“œ

import java.util.Arrays;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        Arrays.sort(citations);
        for(int i=0; i<citations.length; i++){
            int smaller = Math.min(citations[i], citations.length-i);
            answer = Math.max(answer, smaller);
        }
        return answer;
    }
}

ํ—ˆ๋ฉ” ...... ๋‹จ์ˆœํ•˜์ง€๋งŒ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค ..;;

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€