쉽게 쉽게

[프로그래머스] 다음 큰 숫자 -Java 본문

문제풀이/프로그래머스

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

곱마2 2025. 11. 1. 15:33
반응형

▤ 목차

    1. 문제설명

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

     

    프로그래머스

    SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

    programmers.co.kr

    자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.

    조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
    조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
    조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.
    예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.
    자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

    제한 사항
    n은 1,000,000 이하의 자연수 입니다.


    입출력 예

    n result
    78 83
    15 23

    입출력 예 설명
    입출력 예#1
    문제 예시와 같습니다.


    입출력 예#2
    15(1111)의 다음 큰 숫자는 23(10111)입니다.

    2. 문제풀이

    나의 풀이

    class Solution {
        public int solution(int n) {
            int answer = 0;
            int chk_1 = 0; //1갯수 체크
            String x = Integer.toBinaryString(n);
            for(int i=0; i<x.length(); i++){
                if(x.charAt(i) == '1'){
                    chk_1++;
                }
            }
    
            while(true){
              n += 1;
              int chk_2 =0;  
              String y = Integer.toBinaryString(n);
              for(int j=0; j<y.length(); j++){
                    if(y.charAt(j) == '1'){
                        chk_2++;
                    }
                } 
               if(chk_1 == chk_2){
                   answer = n;
                   break;
               } 
            }    
                
            return answer;
        }
    }

    좀 직관적인 풀이방법을 선택했는데 이것보다 더 좋은 방법들이 있었다.

    class Solution {
        public int solution(int n) {
            // Integer.bitCount()는 정수의 2진 표현에서 1로 설정된 비트의 개수를 반환
            int countOfOnesN = Integer.bitCount(n);
    
            // n보다 큰 수부터 1씩 증가시키며 비교
            int nextNum = n;
            while (true) {
                nextNum++; // n의 다음 수부터 시작
    
                // 증가된 수의 2진수 1의 개수를 계산
                int countOfOnesNext = Integer.bitCount(nextNum);
    
                if (countOfOnesN == countOfOnesNext) {
                    return nextNum;
                }
            }
        }
    }

    Integer.bitCount 함수는 정수의 2진 표현에서 1로 설정된 비트의 개수를 반환하는 함수로 아주 유용하게 사용할 수 있다.

     

    잘못된 내용이 있다면 지적부탁드립니다. 방문해주셔서 감사합니다.
    반응형