[Programmers] H-Index
2023. 8. 10. 17:31ㆍComputer Sciences/Problem Solve
https://school.programmers.co.kr/learn/courses/30/lessons/42747#
문제 설명
설명도 적고 불친절하여 문제를 이해하는 데 시간을 많이 쓴 문제다. 필자와 같은 느낌을 받은 분들도 적지 않아 보였다. 아래는 참고한 글이다.
필자가 처음에 이해한 것은 인용된 횟수가 h인줄 알았다. 예를 들어 [1000, 2000, 3000, 4000, 5000] 이 있으면 3000번 이상 인용된 횟수가 3번이고 과반수가 넘기 때문에 최댓값이 되므로 3000이 정답인 줄 알았다. 그러나 5번 이상 인용된 논문이 5개이므로 5가 정답이다. 윗 글로 문제를 이해하고 나니 너무 쉬운 문제임을 깨닫고 이를 이해하려고 보낸 시간이 허무했다. 간단하게 오름차순으로 정렬한 뒤 순서대로 접근하면서 논문 인용 횟수가 인덱스보다 커지면 (모든 논문 개수 - 해당 인덱스) 를 반환하면 된다. h의 최댓값은 모든 논문 개수이다.
예를 들어 [3, 0, 6, 1, 5]가 있으면 이를 오름차순 정렬하면 [0, 1, 3, 5, 6]이 된다.
h = 5, if (0(인용된 횟수) >= 5(h)) continue;
h = 4, if (1(인용된 횟수) >= 4(h)) continue;
h = 3, if (3(인용된 횟수) >= 3(h)) return h(3);
따라서 3이 반환된다. 나머지는 당연히 3보다 많이 인용됐으므로 비교하지 않아도 된다.
코드
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
Arrays.sort(citations);
for (int h = citations.length; h > 0; h--) {
if (citations[citations.length - h] >= h) {
return h;
}
}
return 0;
}
}
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Programmers] 교점에 별 만들기 (0) | 2023.08.16 |
---|---|
[Programmers] [1차] 캐시 (0) | 2023.08.16 |
[Programmers] n^2 배열 자르기 (0) | 2023.08.10 |
[Programmers] 괄호 회전하기 (0) | 2023.08.09 |
[Programmers] 귤 고르기 (0) | 2023.08.09 |