본문 바로가기

프로그래밍/알고리즘 (JAVA)

[JAVA] 프로그래머스 LEVEL2 다음 큰 숫자 / Java BitCount를 활용하여 문제풀이

처음 풀이식

    public int solution(int n) {
        int answer = 0;
        
        /*
         *  조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
			조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
			조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
         */
        
        String n2 = Integer.toBinaryString(n);
        n2 = n2.replaceAll("0", "");
        int cnt = 1;
        while(true) {
        	answer = n + cnt++;
        	String num2 = Integer.toBinaryString(answer);
        	
        	num2 = num2.replaceAll("0", "");
        	
        	if(n2.length() == num2.length()) {
        		break;
        	}
        }
        
        return answer;
    }

코드는 문제없이 통과헀으나 효율성에 걸렸다.

왜 걸렸을까?

 

 

정답은 Java 함수 중 BitCount 라는 함수에 있었다....

복잡하게 이진수로 변환시켜 0을 없애고 그 길이를 세는 방법이 아니라 그냥 처음부터 1의 갯수만 뽑아내는 함수가 있었다 ㅋㅋ;

 

 

    public int solution(int n) {
        int answer = 0;
        
        /*
         *  조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
			조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
			조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
         */
        
        int nBitCnt = Integer.bitCount(n);
        int cnt = 1;
        while(true) {
        	answer = n + cnt++;
        	int answerBitCnt = Integer.bitCount(answer);
        	
        	if(nBitCnt == answerBitCnt) break;
        }
        
        return answer;
    }

 

 

깔끔하게 단 몇 줄로 코드가 완성..