프로그래머스 - H-Index (Level 2)

2024. 1. 22. 02:29코딩테스트 정리(자바)

728x90
import java.util.*;
class Solution {
    public int solution(int[] citations) {
      
        int n=citations.length; 
        int answer=0;
        Arrays.sort(citations); //오름차순 정렬
        
        for(int i=0;i<n;i++){
            int h=n-i; 
            //h는 1부터 배열 길이까지 가능하다
            if(citations[i]>=h){ 
                //오름차순 정렬했으므로 해당 인덱스가 h 이상이라면 답은 h
                answer=h;
                break;
            }
     
        }
        return answer;
    }
}

 

 

나의 풀이

: for문을 순서대로 따라가 보면

 

1. h=5-0=3, 5편 이상
 0>=5가 성립하지 않으므로 다음으로

 

2. h=5-1=4, 4편 이상

1>=4 성립하지 않으므로 다음으로

 

3. h=5-2=3, 3편 이상

3>=3 성립하므로 답.

 

h를 최댓값부터 줄여나가기 때문에 가장 먼저 조건에 성립하면 그것이 답이다.

 

 


내림차순으로 H-index를 찾을 수도 있다.

 

 

int 배열을 내림차순으로 정렬하기

:

Arrays.sort(arr, Collections.reverseOrder());

 

그러나 int배열을 Integer 타입 배열로 변환시킨 후 정렬해야 한다. 

Object 타입만 가능 -> 기본형은 안됨

 

 

Integer 배열로 변환하기

:

Integer[] arr3 = Arrays.stream(arr).boxed().toArray(Integer[]::new);


다시 int 배열로 변환하기
:

Arrays.stream(a).mapToInt(Integer::intValue).toArray();

 

 

즉, int 배열을 내림차순으로 정렬 후 int 배열로 변환하기까지의 과정은 아래와 같다.

Integer[] arr = Arrays.stream(citations).boxed().toArray(Integer[]::new);

Arrays.sort(arr, Collections.reverseOrder());

citations=Arrays.stream(arr).mapToInt(Integer::intValue).toArray();

 

728x90