https://programmers.co.kr/learn/questions/8885
프로그래머스 h-index문제는 문제를 이해하기가 정말 어려운 문제였습니다.
레벨2로 책정된 이유는 아마 문제 해석하는게 어려워서 그런건가...
문제만 이해한다면 코드 작성은 간편한 편이었어요.
문제 설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
제한사항
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
입출력 예
[3, 0, 6, 1, 5] | 3 |
입출력 예로 설명을 한번 해보겠습니다.
이 과학자는 5편의 논문을 발표했습니다.
첫번째 논문은 3번 인용되었습니다.
두번째 논문은 5번 인용되었습니다.
세번째 논문은 1번 인용되었습니다.
네번째 논문은 4번 인용되었습니다.
다섯번째 논문은 2번 인용되었습니다.
이 과학자의 5편의 논문중 3편은 3번이상 인용되었고 나머지 논문은 3회 이하로 인용되었기 떄문에 hindex는 3입니다.
아직도 이해가 잘 되지 않으실거에요.. 저도 그랬거든요
h-index를 다시 설명드리면 논문 N개가 적어도 N번 이상의 인용을 받고, 나머지 논문이 N개와 같거나 적은 인용을 받을 때 이 연구자의 h-index가 N이 됩니다.
즉 인용받은 수와 나머지 논문의 인용수와도 비교해봐야 하는거죠.
근데 잘 살펴보면 작은 숫자일수록 인용받은 논문의 수가 커지고 큰 수 일수록 인용받은 논문의 수가 작아지는 특성이 있습니다.
그렇기기 때문에 오름차순으로 정렬을 먼저 한 후에 풀면 더 쉽게 풀 수 있습니다.
정답코드
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
int cite;
Arrays.sort(citations);
for(int i=0; i<citations.length; i++) {
cite = citations.length - i;
if(citations[i]>=cite){
answer = cite;
break;
}
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 - 라면공장 (0) | 2020.04.12 |
---|---|
프로그래머스 - 조이스틱(오답) (0) | 2020.04.12 |
프로그래머스 - k번째수 (0) | 2020.04.12 |
프로그래머스 - 위장 (1) | 2020.04.10 |
프로그래머스 - 완주하지 못한 선수 (0) | 2020.04.10 |