본문 바로가기

Algorithms/Programmers

Level 3 - 다음 큰 숫자

어떤 수 N(1≤N≤1,000,000) 이 주어졌을 때, N의 다음 큰 숫자는 다음과 같습니다.

  • N의 다음 큰 숫자는 N을 2진수로 바꾸었을 때의 1의 개수와 같은 개수로 이루어진 수입니다.
  • 1번째 조건을 만족하는 숫자들 중 N보다 큰 수 중에서 가장 작은 숫자를 찾아야 합니다.

예를 들어, 78을 2진수로 바꾸면 1001110 이며, 78의 다음 큰 숫자는 83으로 2진수는 1010011 입니다.
N이 주어질 때, N의 다음 큰 숫자를 찾는 nextBigNumber 함수를 완성하세요.


풀이

이진법으로 바꿔주는 자체 메소드를 이용하면 쉽게 해결

그냥 이런거 이용없이 한다고 했을 때 먼저 이진법으로 바꿔야 하니

n % 2 값을 stack에 쌓아두고 pop해서 이진수를 만들고 1의 count를 센다

이 process를 반복하면 해결될 듯

class TryHelloWorld
{
    public int nextBigNumber(int n)
    {
        int count1 = 0;
        String binaryString1 = Integer.toBinaryString(n);
        for (char c : binaryString1.toCharArray()){
            if (c=='1') count1++;
        }

        while (true){
            n++;
            int nextCount2 = 0;
            String binaryString2 = Integer.toBinaryString(n);
            for (char c : binaryString2.toCharArray()){
                if (c=='1') nextCount2++;
            }
            if (count1 == nextCount2) break;
        }
      return n;
    }
    public static void main(String[] args)
    {
        TryHelloWorld test = new TryHelloWorld();
        int n = 78;
        System.out.println(test.nextBigNumber(n));
    }
}


'Algorithms > Programmers' 카테고리의 다른 글

Level 4 - 숫자의 표현  (0) 2018.03.09
Level 3 - N개의 최소공배수  (0) 2018.03.09
Level 3 - 야근지수  (0) 2018.02.28
Level 3 - 멀리 뛰기  (0) 2018.02.28
Level 2 - 2016년  (0) 2018.02.27