하루에 한 문제
[프로그래머스] H-Index -Java 본문
https://programmers.co.kr/learn/courses/30/lessons/42747#
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
int size=citations.length;
for(int i=0; i<size; i++) {
if(citations[i]>=size-i) {
answer=size-i;
break;
}
}
return answer;
}
}
소요시간 : 45분
문제를 똑바로 이해 못해서 2번이나 갈아엎었습니다....
일단 H-Index란
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 H-Index라고 정의되어 있습니다.
이 말을 해석해보자면 즉 H-Index의 최댓값은 입력으로 들어온 배열의 크기와 같다는 것을 알 수 있습니다.
이를 통해 만든 로직을 살펴보면
1. citations배열을 오름차순으로 정렬해줌
2. citations[i]>=size-i 이면 answer에는 size-i 값을 넣어주고 끝
이 조건문을 살펴보면
citations[i] -> 현재 인덱스가 가르키고 있는 배열의 값 -> 이 논문이 인용된 횟수
size-i 지금 상황에서 나올 수 있는 최대의 h의 값 -> 내가 선택한 인덱스를 포함해 배열의 끝까지 남은 인덱스의 갯수 ->인덱스 값이 증가할 수록 h의 값은 하나씩 줄어든다
ex) 배열의 크기가 5라고 쳐보자
[x,x,x,x,x] 이 상황에서 나올 수 있는 가장 큰 h값은 5이다. 배열의 인덱스가 0에서 1로 이동하면
[x,x,x,x] 가 된다. 오름차순으로 정렬을 한 상황이기 때문에 그 앞의 인덱스값은 보지 않는다.
이렇게 되면 이 상황에서 나올 수 있는 가장 큰 h값은 4이다.
즉 현재 가르키고 있는 논문이 인용된 횟수가 지금 상황에서 나올 수 있는 최대의 h값보다 크거나 같다는 뜻은
자기자신을 포함해서 배열의 끝까지 남은 인덱스가 자신이 가지고 있는 수보다 크거나 같다는 뜻이다. 즉 H-Index라는 뜻입니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 Summer/Winter Coding] 소수 만들기 -Java (0) | 2020.12.17 |
---|---|
[프로그래머스] N개의 최소공배수 -Java (0) | 2020.12.17 |
[프로그래머스] 가장 큰 정사각형 찾기 -Java (0) | 2020.12.16 |
[프로그래머스] 가장 큰 수 -Java (0) | 2020.12.16 |
[프로그래머스 2020 KAKAO BLIND RECRUITMENT] 괄호 변환 -Java (0) | 2020.12.14 |