코딩 테스트/프로그래머스

[Level2] 다음 큰 숫자

갓생사는 김초원의 개발 블로그 2020. 10. 10. 23:49

[문제 설명]

https://programmers.co.kr/learn/courses/30/lessons/12911

 

코딩테스트 연습 - 다음 큰 숫자

자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다. 조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다. 조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니

programmers.co.kr

[풀이 과정]

JAVA의 Integer 클래스에는 이진수 관련 메소드들을 제공한다.

 

1. Integer.toBinaryString( int );

- 10진수 -> 2진수로 변환하고 싶을 때 사용한다. 

public class Test12 {
    public static void main(String[] args) {
       int n = 78;

       String binary = Integer.toBinaryString(n);
       System.out.println(binary);
    }
}

// 1001110

  

2. Integer.bitCount( int );

- 10진수 숫자를 2진수로 변환했을 때 1bit의 개수를 반환한다. 

public static void main(String[] args) {
       int n = 78;

       String binary = Integer.toBinaryString(n);
       System.out.println(binary);

       int one_count = Integer.bitCount(n);
       System.out.println(one_count);
    }
    
 // 1001110
    4

위 메소드들의 존재를 몰랐을 때는 10진수 -> 2진수 변환 메소드와 1비트 개수를 세는 로직도 직접 구현했다. 

그렇게 하니 정확도 검사는 모두 맞았지만 효율성 검사를 통과하지 못했다. 

 

위 메소드를 사용하니 효율성 검사도 모두 통과.  

 

[JAVA 코드]

package com.algorithm.level2;

public class Test16 {
    public static void main(String[] args) {
        int n = 78;
        System.out.println(solution(n));
    }

    public static int solution(int n) {
        // 숫자 n을 이진수로 변환했을 때 1의 개수 
        int one_count = Integer.bitCount(n);
        
        int answer_count = 0;
        while (one_count != answer_count) {
            // n보다 큰 숫자들을 하나씩 순회 
            n++;
            answer_count = Integer.bitCount(n);
        }
        return n;
    }

}