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

박상원·2023년 11월 22일
0

Coding Test

목록 보기
3/18

오늘 풀어본 문제는 프로그래머스의 다음 큰 숫자라는 문제이다.
해당 문제 설명은 다음과 같다.

문제 설명
자연수 n이 주어졌을 때, n의 다음 큰 숫자는 다음과 같이 정의 합니다.
조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.

처음에는 비트 연산을 하여 풀려고 해봤는데 도저히 방법이 생각나지 않았다.
다음으로 생각한 방법은 n에서 1씩 증가시키며 2진수로 봤을 때 1의 객수가 같아지는 다음 수를 찾는 방법이다.
이 방법을 적용하여 풀었더니 정답을 받았다.

문제를 푼 코드는 다음과 같다.

class Solution {
    public int solution(int n) {
        int answer = 0;
        int oneCount = Integer.bitCount(n);
        int count = oneCount + 1;
        
        while(oneCount != count){
            n++;
            count = Integer.bitCount(n);
            answer = n;
        }
        return answer;
    }
}

먼저 n의 2진수 1의 객수를 Integer의 bitCount() 메서드를 통해 구해주고,
while문에 들어가기 전에 count와 oneCount의 수가 같지 않게 하기 위해 count에 oneCount + 1을 해준다.
while문 안에 들어가서 n을 증가시키고 그 값의 2진수 1의 갯수를 구하고 answer에 n값을 저장한다.
그리고 oneCount와 count의 값이 같아질 때 다음 큰 수이기때문에 while문을 탈출한다.
참고로 여기서 oneCount는 본래 n의 2진수 1의 갯수이고,
count는 1씩 더해진 값의 2진수 1의 갯수이다.

더 좋은 방법이 있다고 생각하지만 찾지 못하여서 아쉬웠다.

0개의 댓글