[프로그래머스] Level2 다음 큰 숫자 (Java)

MINSANG YU·2022년 10월 12일
0

프로그래머스

목록 보기
12/15
post-thumbnail

문제 링크

문제

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

조건 1. n의 다음 큰 숫자는 n보다 큰 자연수 입니다.
조건 2. n의 다음 큰 숫자와 n은 2진수로 변환했을 때 1의 갯수가 같습니다.
조건 3. n의 다음 큰 숫자는 조건 1, 2를 만족하는 수 중 가장 작은 수 입니다.

예를 들어서 78(1001110)의 다음 큰 숫자는 83(1010011)입니다.

자연수 n이 매개변수로 주어질 때, n의 다음 큰 숫자를 return 하는 solution 함수를 완성해주세요.

핵심

Integer 클래스 내부에 있는 메서드인 toBinaryString(), bitCount() 메서드를 알면 쉽게 풀 수 있는 문제였다.

코드

class Solution {
    
    static int count(String num) {
        int result = 0;
        for(int i=0; i<num.length(); i++) {
            if(num.charAt(i)=='1') result++;
        }
        return result;
    }
    
    public int solution(int n) {
        int answer = n+1;
        int cnt = count(Integer.toBinaryString(n));
        String temp = "";
        
        while(answer<=1000000) {
            temp = Integer.toBinaryString(answer);
            if(count(temp)==cnt) {
                answer = Integer.parseInt(temp,2);
                break;
            }
            answer++;
        }
        
        return answer;
    }
}

처음 풀 땐 count() 메서드를 직접 만들었지만, bitCount()라는 메서드가 동일한 역할을 해준다는 것을 배우고 난 뒤

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

훨씬 간단하게 해결할 수 있었다.

profile
쉿! 공부중

0개의 댓글