티스토리 뷰

"생각보다 간단했다." 고 말할 뻔했다. 인용 횟수를 저장할 h와 해당 h값보다 큰 인용 횟수를 가진 정수의 개수를 가지는 n을 선언해준 뒤,  citations 배열을 오름차순 정렬해주고, h 값에 해당하는 iterator를 ciataions의 길이에 빼주면 h보다 큰 수의 개수를 구할 수 있고, h의 최대 값은 n이 h보다 같거나 커지는 최초의 순간이므로, 그렇게 코드를 작성해주면 끝날 줄 알았다. 


package com.choonham;

import java.util.Arrays;

class Solution {
    public int solution(int[] citations) {
        int answer = 0;
        
        int h = 0; 
        int n = 0;
        Arrays.sort(citations);
        
        for(int i = 0; i < citations.length; i++) {
        	h  = citations[i];
        	n = citations.length - i;
        	if(h >= n) break;
        }
        
        answer = n;
        
        return answer;
    }
}

음.... 문제를 보자마자 짠 코드이고, 성공한다면 역대급 빠른 시간으로 LV2 문제를 푼 건데....

 

인생은 그렇게 만만하지가 않은 거 같다.... 위 코드가 실패할 단 한 가지의 반례를 이제 찾으면 되는데... 원래 2개 있는 거보다 1개 있는 게 더 찾기 힘든 법... 반례를 생각해보자...

어제도 마찬가지로, 마지막 케이스가 틀리는 경우의 대부분은 배열 전체가 0으로 들어오는 경우이다. 

즉, 테스트 케이스에 {0,0,0}을 추가해보면,

Got you!! 0이 나오지 않고, 1이 나온다. 뭐.... 지금 생각해보니 당연하다. 0,0,0이 들어갔을 때, 오름차순 정렬은 의미가 없으니...

그럼 배열이 모두 0인 경우만 예외 처리해주면 될까?

 


package com.choonham;

import java.util.Arrays;

class Solution {
	public int solution(int[] citations) {
		int answer = 0;

		int h = 0;
		int n = 0;
		Arrays.sort(citations);

		for (int i = 0; i < citations.length; i++) {
			h = citations[i];
			n = citations.length - i;
			if (h >= n)
				break;
		}
		
		if(citations[citations.length-1] == 0) n = 0;

		answer = n;

		return answer;
	}
}

ㄱㄴ??

 

ㅇㅇ 아주 잘 된다.

내 실력이 올라간 건지 뭔지 잘 모르겠는데, 정렬 문제가 점수가 아주 달달하다..ㅎㅎ

 

주말 포스팅 끝!

Comments