https://programmers.co.kr/learn/courses/30/lessons/42747
문제
접근
H-Index는 발표한 N개의 논문중 h이상 인용된 논문이 h이상이여야 하므로,
해의 범위가 0 ~ N 이다.
나는 역순정렬후 H-index를 N부터 0까지로 순회하면서 H-index 이상 인용된 논문이 H개 이상인지를 확인후
루프를 탈출하도록 구현해보았다.
풀이
import java.util.Arrays;
import java.util.Comparator;
public class Solution {
public int solution(int[] citations) {
Integer[] tmp = Arrays.stream(citations).boxed().toArray(Integer[]::new); //정렬을 위해서는 boxing 필요
Arrays.sort(tmp, Comparator.reverseOrder());
int hindex = citations.length;
while(hindex>=0) { //hindex의 값의 범위는 0 ~ 발표한 논문수 사이이다.
int cnt = 0;
for (int i = 0; i < tmp.length; i++) {
if (tmp[i] >= hindex) // h번 이상 인용되었으면 count
cnt++;
else break; // 아닌 순간에는 정렬되어있으므로 뒤는 더 볼 필요 없다.
}
if (hindex <= cnt) // h이상 인용된 논문이 h이상이면
return hindex;
hindex--;
}
return 0;
}
}
유명한 풀이
아래 풀이에 감탄하고 발췌 해왔습니다.
public int solution2(int[] citations) {
Arrays.sort(citations);
int max = 0;
for(int i = citations.length-1; i >= 0; i--){
int min = (int)Math.min(citations[i], citations.length - i);
if(max < min) max = min;
}
return max;
}
성능적으로도 우월한 코드네요.. 정말 감탄했습니다.
댓글 반응이.. 웃기네요ㅋㅋㅋㅋㅋㅋ
'Algorithm > 프로그래머스 고득점 Kit' 카테고리의 다른 글
[완전탐색] 소수찾기 - Java 풀이, 순열 포인트,★★ (0) | 2021.07.27 |
---|---|
[완전탐색] 모의고사 - Java 풀이 (0) | 2021.07.27 |
[정렬] 가장 큰 수 - Java 풀이 (0) | 2021.07.24 |
[정렬] K번째 수 - Java 풀이 (0) | 2021.07.24 |
[Hash] 베스트 앨범 - Java 풀이★★★ (0) | 2021.06.17 |