JAVA/Argorithm Test

# Level 2 - H-Index

skysoo1111 2020. 12. 15. 14:45

[문제]

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

 

어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.

 

어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

 

[다른 사람 풀이 참고]

문제의 조건을 파악하고 필요없는 경우는 제외한 뒤, 코딩을 하면 간단하다.

하지만 나는 그러지 못해서 시간이 많이 걸렸다...

 

문제의 의미를 풀어보면 조건은 크게 두가지로 보인다.

1. 논문 n편 중, h번 이상 인용된 논문이 h편 이상

2. 나머지 논문이 h번 이하로 인용되었다면 h의 최댓값이 H-Index이다.

 

처음에 두가지 조건을 모두 만족하는 값을 구하려고 애를 많이 썼다.

 

그런데 정렬 후 h>=k 인 값을 찾으면 h의 최댓값을 구할 수 있고 위의 조건 중 2번은 자연스레 해결된다...

h k (h번 이상 인용된 횟수)
0 5
1 4
3 3
5 2
6 1

 

import java.util.*;
class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        int h = 0;
        int k = 0;
        Arrays.sort(citations);

        for (int i = 0; i < citations.length; i++) {
            h = citations[i];
            k =  citations.length - i;

            if (k <= h) {
                answer = k;
                break;
            }
        }
        return answer;
    }
}

 

<문제 출처>

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

 

'JAVA > Argorithm Test' 카테고리의 다른 글

# Level 2 - 소수 찾기  (0) 2020.12.16
# Level 2 - 전화번호 목록  (0) 2020.12.15
# Level 2 - 프린터  (0) 2020.12.09
# Level 2 -124 나라의 숫자  (0) 2020.12.08
# Level 1 - 하샤드 수  (0) 2020.12.04