본문 바로가기

알고리즘

프로그래머스 - 다음 큰 숫자

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

 

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

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

programmers.co.kr

문제 읽고 그대로 구현하면 되는 문제입니다. 2진수로 변환하는 매서드 만드는데 조금 헷갈리더라고요.

스택사용해서 만들면 조금 수월하게 만들 수 있는 것 같습니다! 다른 사람들 풀이도 조금 참고해봐야겠습니다.

문제 풀이 코드

class Solution {
        public int solution(int n) {
            int result = oneCheck(binaryNumber(n));
            int cnt = n;
            while(true){
                cnt++;
                if(result == oneCheck(binaryNumber(cnt)))
                    return cnt;
            }
        }

        private int oneCheck(StringBuilder number) {
            int num = 0;
            for (int i = 0; i < number.length(); i++) {

                if (number.charAt(i) == '1')
                    num++;
            }
            return num;
        }

        private StringBuilder binaryNumber(int start){

            Stack<Integer> stack = new Stack();
            while(start / 2 != 1){
                stack.push(start%2);
                start = start/2;
            }
            stack.push(start%2);
            stack.push(1);

            StringBuilder stringBuilder = new StringBuilder();
            while(!stack.isEmpty()){
                stringBuilder.append(stack.pop());
            }
            return stringBuilder;
        }

    }