코딩테스트

[프로그래머스/자바] H-Index_42747

라임온조 2023. 7. 28. 10:40

문제 및 코드

1. 생각

// 생각
    // citations 정렬 후 반복문 돌기
// 구현
    // h-index 최댓값은 citations의 길이부터 시작가능
    // citations 정렬
    // citations를 돈다(내림차순으로)
        // 각 값이 h-index보다 크거나 같으면 지금까지 count 1 증가 후 다음으로
        // 각 값이 h-index보다 작으면 h-index와 count비교해서 다르면 종료 후 h-index 1 줄이고 다시 반복
        // 각 값이 h-index보다 작으면 h-index와 count비교해서 같으면 해당 h-index 리턴

2. 회고

맨 처음에 위와 같은 생각을 가지고 풀었는데 딱 한 테케가 실패했다. 다른 테케들을 넣어봤지만 도저히 못 찾겠어서 다른 글들을 참고해보니 [4, 3, 3, 3, 0, 0, 0,], 3인 테케가 실패했다.

풀이를 보니 h-index의 정의에 따라 비교 조건을 잘못 줘서 그런 거였다. 그래서 그 부분을 수정하니 통과.

아래는 원래 풀이인데  if(h_index != count) 이 부분을 if(count < h_index) 이렇게 바꿔줬다. 이래야 h-index의 정의를 온전히 만족시킨다.

더보기

// 생각
    // citations 정렬 후 반복문 돌기
// 구현
    // h-index 최댓값은 citations의 길이부터 시작가능
    // citations 정렬
    // citations를 돈다(내림차순으로)
        // 각 값이 h-index보다 크거나 같으면 지금까지 count 1 증가 후 다음으로
        // 각 값이 h-index보다 작으면 h-index와 count비교해서 다르면 종료 후 h-index 1 줄이고 다시 반복
        // 각 값이 h-index보다 작으면 h-index와 count비교해서 같으면 해당 h-index 리턴

import java.util.*;

class Solution {
    public int solution(int[] citations) {
        int h_index = citations.length;
        
        // 정렬
        Arrays.sort(citations);
        
        // 반복문 돌기
        int count = 0;
        
        for(int i = citations.length-1; i>=0; i--){
            int cur = citations[i];
            if(cur >= h_index){
                count += 1;
            }else{
                if(h_index != count){
                    h_index -= 1;
                    count = 0;
                    i = citations.length;
                }else{
                    break;
                }
            }
        }
        
        return h_index;
    }
}

3. 체크

풀이 횟수 시간 정답 여부 참고 여부
2 30분 X O