https://school.programmers.co.kr/learn/courses/30/lessons/42747#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
ex) 0, 1, 3, 5, 6
문제에서 가장 중요한 조건은 다음과 같다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
여기서 알 수 있는 사실은 H-Index는 배열의 길이보단 작다는 뜻과, 그 중에서 h번 이상 인용된 논문이 h편 이상이라는 것 이다.
따라서 크기 비교를 위해서 오름차순 정렬을 하는것이 바람직하다.
H-Index는 배열의 길이보다 작으므로 다음과 같이 반복문에서 h_index값을 정할 수 있다.
for(int i=0; i<citations.length; i++){
int h_index=citations.length-i;
}
이때 만약0, 1, 3, 5, 6배열에서 i가 0이면 h_index값은 5인데 이때 h_index값이 5를 만족하려면
5보다 크거나 같은 값이 5개가 되어야 한다는 말이다.
그러면 citations[0]이 5보다 크거나 같은 경우에만 가능하다.
따라서 조건문을 통해 h_index보다 큰값이 h_index만큼 있는지 확인 해줘야한다.
if(citations[i]>=h_index){
answer=h_index;
break;
}
이러한 로직은 반복문에서 구현하면 다음과 같다.
for(int i=0; i<citations.length; i++){
int h_index=citations.length-i;
if(citations[i]>=h_index){
answer=h_index;
break; //최대값을 구해야 하므로 처음으로 조건을 만족한 h_index가 최대값이자 answer값이 됨
}
}
<전체 코드>
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
for(int i=0; i<citations.length; i++){
int h_index=citations.length-i;
if(citations[i]>=h_index){
answer=h_index;
break;
}
}
return answer;
}
}
'알고리즘 > 정렬' 카테고리의 다른 글
프로그래머스 - 가장 큰 수(Java) (0) | 2025.01.11 |
---|---|
프로그래머스 - K번째수(Java) (0) | 2025.01.10 |