✔ H-Index
문제 분석하기
배열을 정렬한 후 정렬한 배열을 반복문으로 돌면서 각 논문의 인용 수와 논문 수를 비교
논문의 인용 수가 논문 수보다 크면 h를 증가하고, 같으면 논문 수를 리턴
예) [0, 1, 3, 5, 6]
i | 각 논문의 인용 수 | 논문 수 | |
0 | 0 | 5 | 0번 이상 인용된 논문이 5편이므로 h 증가 |
1 | 1 | 4 | 1번 이상 인용된 논문이 4편이므로 h 증가 |
2 | 3 | 3 | 3번 이상 인용된 논문이 3편이므로 h 반환 |
3 | 5 | 2 | 5번 이상 인용된 논문이 2편 |
4 | 6 | 1 | 6번 이상 인용된 논문이 1편 |
손으로 풀어보기
- 논문의 인용 횟수를 담은 배열을 오름차순 정렬
- 반복문을 돌면서 각 논문의 인용 수와 논문 수를 비교
- 같으면 논문 수를 리턴
슈도코드 작성하기
citations(어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열)
citations 정렬
answer(h의 최댓값) = h 찾기
answer 반환
h 찾기 {
for(i -> citations의 길이만큼) {
count(인용 횟수) = citations - i
if (citations[i] >= count) {
return count;
}
}
}
코드 구현하기
/**
* 42747) H-Index
*/
public class K003_42747 {
// citations(어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열)
public int solution(int[] citations) {
// citations 정렬
Arrays.sort(citations);
// answer(h의 최댓값) = h 찾기
int answer = findH(citations);
// answer 반환
return answer;
}
// h 찾기
private int findH(int[] citations) {
for (int i = 0; i < citations.length; i++) {
// count(h가 i일 때, 논문 수)
int count = citations.length - i;
// 각 논문의 인용 수가 논문 수보다 같거나 클 경우
// citations[i]번 이상 인용된 논문이 count편인지 확인
if (citations[i] >= count) {
// 논문 수 리턴
return count;
}
}
return 0;
}
public static void main(String[] args) {
K003_42747 solution = new K003_42747();
int[] citations = { 3, 0, 6, 1, 5 };
int result = solution.solution(citations);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[42883] 큰 수 만들기 (0) | 2023.11.25 |
---|---|
[42839] 소수 찾기 (0) | 2023.11.24 |
[1238] Contact (0) | 2023.11.23 |
[1234] 비밀번호 (0) | 2023.11.23 |
[1233] 사칙연산 유효성 검사 (0) | 2023.11.22 |