algorithm/프로그래머스
[프로그래머스] H-Index (07.12)
자바왕세자
2020. 7. 12. 23:13
문제
https://programmers.co.kr/learn/courses/30/lessons/42747
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
접근법
두가지의 방식으로 풀었다.
첫 번째 방식은 직관적으로 이중포문을 사용하여서 풀었다.
배열의 수를 정렬하고 큰 수부터 차례로 조건과 비교해나가면서 연산하였다.
두 번째 방식은 좀 더 규칙을 찾는데에 힘을 썼다.
첫 번째 방식과 마찬가지로 먼저 정렬을 하였다.
그 후 큰 수부터 차례로 비교하는데 h값은 점점 작아지고, 그에 맞춰 h보다 큰 값의 개수는 늘어나게 된다.
h값은 감소하고, h보다 큰값은 증가하는데 두 값이 교차하는 순간이 조건에 부합하는 순간이다.
코드
첫 번째 방식
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
int max = citations[citations.length-1];
while(max >= 0){
int cnt = 0;
for(int i=citations.length-1;i>=0;i--){
if(max <= citations[i])
cnt++;
else
break;
}
if(cnt >= max && citations.length-max <= max) {
answer = max;
break;
}
max--;
}
return answer;
}
}
두 번째 방식
import java.util.Arrays;
class Solution {
public int solution(int[] citations) {
int answer = 0;
Arrays.sort(citations);
for(int i = citations.length - 1; i >= 0; i--) {
if(citations.length - i >= citations[i])
break;
answer++;
}
return answer;
}
}