문제 설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n 편 중 h 번 이상 인용된 논문이 h 편 이상이고 나머지 논문이 h 번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 과학자가 발표한 논문의 수는 1편 이상, 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
입출력 예
citations | return |
[3, 0, 6, 1, 5] | 3 |
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
int h = 0;
int hIndex = 0;
for (int i = 0; i < citations.length; i++) {
h = citations[i];
hIndex = citations.length - i;
if (h >= hIndex) {
answer = hIndex;
break;
}
}
return answer;
}
}
Arrays 클래스의 sort 메소드를 이용하여 배열 citations를 오름차순으로 정렬합니다.
변수 h와 hIndex를 생성합니다. h는 각 논문의 인용 횟수, hIndex는 hIndex를 구하기 위해 점차 증가할 값입니다.
for문이 citations의 길이만큼 순회합니다.
h에 citations의 i번째 원소를 할당합니다.
hIndex에 citations의 길이에 i를 뺀 값을 할당합니다.
if문에서 h가 hIndex보다 크거나 같다면 answer에 hIndex를 할당합니다.
break를 이용하여 반복문을 바로 탈출합니다.
반례로는 [1, 4, 5], 2와 [5, 6, 7], 3이 있습니다. h번 이상 인용된 논문이 h편 이상이어야 하기 때문에 hIndex가 항상 배열의 원소에 있는 값임을 보장할 수 없습니다.
입출력 예 1번에서 h와 hIndex 값을 살펴보면,
h: 0 hIndex: 5 h: 1 hIndex: 4 h: 3 hIndex: 3 |
이와 같은 순서로 값이 갱신됩니다.
문제의 설명이 다소 애매모호하고, 입출력 예 역시 혼란의 여지가 있으므로 더 헷갈리는 문제였던 것 같습니다.
'프로그래머스 > Lv. 2' 카테고리의 다른 글
[프로그래머스 코딩테스트] 연속 부분 수열 합의 개수(Java) (0) | 2023.07.04 |
---|---|
[프로그래머스 코딩테스트] 의상(Java) (0) | 2023.07.03 |
[프로그래머스 코딩테스트] 멀리 뛰기(Java) (0) | 2023.06.30 |
[프로그래머스 코딩테스트] 행렬의 곱셈(Java) (0) | 2023.06.27 |
[프로그래머스 코딩테스트] 다음 큰 숫자(Java) (0) | 2023.06.21 |