본문 바로가기
문제풀이/프로그래머스

[JAVA , Lv2] 다음 큰 숫자

by PhoB 2023. 1. 19.

[문제]

자연수 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 이하의 자연수 입니다.


[내 풀이]

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = n+1;
        int cnt=0 , cnt2 = 0;
        
        String bi1 =Integer.toBinaryString(n);
        cnt = bi1.length() - bi1.replace("1","").length();
            
        while(answer<=1000000){
            String bi2 =Integer.toBinaryString(answer);
            cnt2 = bi2.length() - bi2.replace("1","").length();
            if(cnt == cnt2){
                return answer;
            }
            else answer++;
        }

        return answer;
    }
}


[접근]

그저 1의 갯수를 일일이 구하고 비교하는 코드이다.

풀고나서 다른분들과 비교해보니 좋지못한 코드임이 확 느껴졌다.

단순히 2진수로 변환후 일일이 1의 갯수를 구해주었지만 Integer.bitCount() 메소드의 존재를 알고나니 코드가 많이 짧아졌다. 

import java.util.*;

class Solution {
    public int solution(int n) {
        int answer = n+1;
        int cnt=Integer.bitCount(n);
        
        while(answer<=1000000){
            int cnt2 = Integer.bitCount(answer);
            if(cnt == cnt2) return answer;
            else answer++;
        }
        return answer;
    }
}

 

처음 푼 코드는 지저분했지만 그래도 bitCount()라는 좋은 메소드를 발견했으니 도움이된 문제이다!