728x90
문제설명
입력 & 출력
나의 풀이
import java.util.*;
class Solution {
public int solution(int[] citations) {
int h = 0;
Arrays.sort(citations);
for(int i = citations.length-1 ; i >= 0 ; i--){
if(citations[i] >= h+1){
h++;
}else{
break;
}
}
return h;
}
}
이번 문제는 H-Index를 구하는 문제입니다.
H-Index란 "h"개의 논문이 각각 최소한 "h"번 인용된 가장 큰 숫자 "h"를 의미합니다.
즉 "h"개의 논문이 각각 최소한 "h"번 이상 인용된 경우, 그 연구자의 H-Index는 "h"입니다.
예제가 [3,0,6,1,5]가 있다면
- 1번 이상 인용된 논문이 1개 이상 있느냐 : Yes 4개(1,3,5,6) ➡ h는 1 이상
- 2번 이상 인용된 논문이 2개 이상 있느냐 : Yes 3개(3,5,6) ➡ h는 2 이상
- 3번 이상 인용된 논문이 3개 이상 있느냐: Yes 3개(3,5,6) ➡ h는 3 이상
- 4번 이상 인용된 논문이 4개 이상 있느냐 : No 2개(5,6) ➡
h는 4 이상 ❌
따라서 저의 접근 방식은 다음과 같습니다.
citations 배열을 정렬을 한다. ➡ 6, 5, 3, 1, 0
H-Index 1, 2, 3, 4, 5
▶ 위와 같이 접근을 한다면 1번의 반복으로 H-Index를 구할 수 있습니다.
- H-Index가 1인 경우 1개 이상 인용된 논문이냐 ➡ 6 >= 1 True
- H-Index가 2인 경우 2개 이상 인용된 논문이냐 ➡ 5 >= 2 True
- H-Index가 3인 경우 3개 이상 인용된 논문이냐 ➡ 3 >= 3 True
- H-Index가 4인 경우 4개 이상 인용된 논문이냐 ➡ 0 >= 4 False
따라서 H-Index의 값은 최댓값인 3이 됩니다.
접근하는 방식이 헷갈리지 코드는 어렵지 않습니다.
먼저 H-Index를 조작할 변수 h를 초기화해 주고, Arrays.sort() 메서드를 사용하여 배열을 오름차순으로 정렬합니다.
그리고 for문을 뒤에서부터 접근하여 큰 값부터 순회를 합니다.
만약에 배열의 요소가 크다면 h가 1번 이상 인용되었다는 논문이기 때문에 h는 1 이상이고, 조건에 맞으면 계속해서 h의 값을 증가시켜 줍니다.
그러면 h가 4일 때 조건을 만족하지 않기 때문에 h는 3이 됩니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] Lv.2 큰 수 만들기 (Greedy 알고리즘 , 탐욕, ,StringBuilder, Java) (0) | 2024.06.17 |
---|---|
[프로그래머스] Lv.1 구명보트 (Greedy 알고리즘, Java) (0) | 2024.06.17 |
[프로그래머스] Lv.1 K번째 수 (copyOfRange(), Java) (1) | 2024.06.16 |
[프로그래머스] Lv.2 프로세스 (PriorityQueue, poll(), offer() ,Java) (1) | 2024.06.16 |
[프로그래머스] Lv.2 기능개발 (큐 Queue, peek(), offer(), ArrayList, Java) (1) | 2024.06.15 |