최근에 퀵소트를 다시 구현해 써보고 싶어서 정렬 문제를 풀어보았다. 근데 이 문제는 굳이 퀵소트를 할 필요 없을거 같아서 간단하게 java.util.Arrays 의 sort를 사용해서 정렬해 보았다.
이 문제의 관건은 문제를 읽고 h-index를 제대로 파악해 조건 문을 만드는것이다. 졸리고 머리가 아팠다.
이 문제를 해결하지 못하신분은 저처럼 h-index를 잘못 이해 했었을거라 생각이 듭니다...
import java.util.*;
class Solution {
public int solution(int[] citations) {
int answer = 0;
int n = citations.length;
int h = 0;
int i = 0;
Arrays.sort(citations);
// [22, 42] 2
while(h<=n){
if(citations[i] >= h && n-i>=h) answer=h;
else i++;
h++;
}
return answer;
}
}
코드 설명)
우선은 citations를 정렬해주면 논문이 인용된 횟수에 따라 정렬됩니다.
while 문 부터가 포인트 입니다. 머리가 잘 돌질 않아서 생각하기 편하게 문제에 있는 n(총 논문 수) ,h 값을 변수로 선언했고 h값을 0부터 n까지 증가 시키며 조건에 부합한지 체크했습니다. (조건에 따르면 h값은 n 값을 넘을수 없습니다.) 현재 인덱스(citations[i])에서의 값(인용된 횟수)이 h이상이 아니라면 i의 값을 증가시켜 다음 논문의 인용수를 체크합니다.
h가 문제의 조건에 부합할 경우 h값을 증가시키고 반복합니다. h가 h-index 조건에 맞을 경우 answer에 h값을 넣어줍니다. answer에는 점차 커지는 h의 값만이 들어 가므로 따로 최대값을 구할 필요 없습니다.
'자료구조 & 알고리즘' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수 python/파이썬 (4가지 솔루션) (1) | 2021.06.10 |
---|---|
[codeup] 코드업 2137 : 자라나라 머리머리 풀이 (0) | 2020.09.29 |
[프로그래머스] K번째 수 (0) | 2020.06.14 |
[프로그래머스] 실패율 (2019 KAKAO BLIND RECRUITMENT) (0) | 2020.06.14 |
[프로그래머스] 완주하지 못한 선수 java/자바 (0) | 2020.06.11 |