문제
https://programmers.co.kr/learn/courses/30/lessons/42747#
코딩테스트 연습 - H-Index
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표
programmers.co.kr
코드
단순 이중 for문 이용
class Solution {
public int solution(int[] citations) {
int answer = 0;
int paper_num = citations.length;
for(int i=0; i<=paper_num; i++){ // h
int num = 0;
for(int j=0; j<paper_num ; j++){
if(citations[j]>=i)
num++;
}
if(num>=i)
answer = i;
}
return answer;
}
}
정렬이 필요 없는 방식이다.
코드 2
import java.util.*;
class Solution {
public int solution(int[] citations) {
Arrays.sort(citations);
int max = 0;
for(int i = citations.length-1; i > -1; i--){
int min = (int)Math.min(citations[i], citations.length - i);
if(max < min) max = min;
}
return max;
}
}
테스트 케이스 citations = {3, 0, 6, 1, 5}
오름차순 정렬 후, {0, 1, 3, 5, 6}
for문의 i는 i=4부터 i=0까지 총 5번을 반복한다.
min 변수에는 (가장 큰 원소인 6)과 (해당 원소 이상(크거나 같은) 수의 개수) 중 작은 것이 들어간다.
만약 max보다 min이 크다면 max에 min이 들어간다.
→ 두 값의 최소값의 변화가 증가하다가 감소하는 지점을 찾는다.
어렵다..
코드 3
import java.util.*;
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;
}
}
'Preparing Coding Test > Programmers L2' 카테고리의 다른 글
[Java/프로그래머스/브루트 포스] 소수 찾기 (Level 2) (0) | 2020.08.29 |
---|---|
[Java/프로그래머스/브루트 포스] 카펫 (0) | 2020.08.28 |
[Java/프로그래머스] 문자열 압축 (0) | 2020.08.15 |
[Java/프로그래머스] 카카오프렌즈 컬러링북 (0) | 2020.08.15 |
[Java/프로그래머스] 멀쩡한 사각형 (0) | 2020.08.12 |