https://school.programmers.co.kr/learn/courses/30/lessons/42747
조건
제한시간 : 45분이내
이번 문제는 문제를 이해하는 게 어려웠다.
만약에 H-Index 라는 개념을 알고있다면, 조금 문제를 풀기는 쉬웠을 것이다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
문제 문장 중에 윗말이 가장 중요한 거 같다.
논문 당 피인용 횟수의 데이터를 받은 citations을 내림차순으로 정렬한 뒤 문제를 해결해보았다.
아래는 총 세 가지 경우의 수를 확인해서 어떤 부분을 신경써서 로직을 설계해야 하는지 설명하겠다.
citiations == H-Index
citations : [3, 0, 6, 1, 5]
논문 idx \ 피인용 수, H-Index 피인용 수 H-Index 6 1 5 2 3 == 3 3 3 1 4 0 5 => 순차적으로 탐색해서 H-Index 와 피용수가 같아 질 때가 H-Index의 최대값
citiations < H-Index
citations : [2, 0, 6, 1, 5]=> 순차적으로 탐색하다가 H-Index 가 피인용수보다 커질 경우 그 전 H-Index가 최대값
논문 idx \ 피인용 수, H-Index 피인용 수 H-Index 6 1 5 2 2 < 3 2 3 1 4 0 5
citiations > H-Index
citations : [6, 6, 6, 6, 6]
=> 순차적으로 탐색하다가 H-Index 가 피인용수보다 적을경우, H-Index 최대값은 마지막 수
논문 idx \ 피인용 수, H-Index 피인용 수 H-Index 6 1 6 2 6 3 6 4 6 < 5 6 5
이렇게 고려해서 아래 테스트 테스트케이스 그림에 맞춰 문제를 설계하면 된다.
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Integer[] array = new Integer[citations.length];
for (int i = 0; i < citations.length; i++) {
array[i] = citations[i];
}
Arrays.sort(array, new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2 - i1;
}
});
//통과
for (int i = 0; i < array.length; i++) {
if(array[i] >= i+1) {
answer += 1;
}else if(array[i] < i+1) {
break;
}
}
return answer;
}
}
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 *Java] - 카펫 (0) | 2022.07.21 |
---|---|
[프로그래머스 *Java] - 위장 (0) | 2022.07.20 |
[프로그래머스 *Java] - 2 x n 타일링 (0) | 2022.07.18 |
[프로그래머스 *Java] - 배달 (0) | 2022.07.16 |
[프로그래머스 *Java] - 괄호 회전하기 (0) | 2022.07.15 |