코딩테스트

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

오쟝 2023. 12. 31. 08:47

 

Integer.toBinaryString을 사용해 1의 개수를 구해놓고 n++을 하면서 1의 개수가 같은 수를 구하는 방법을 사용했습니다!

class Solution {
    public int solution(int n) {
        int answer = 0, cnt = 0, binN = n + 1, binCnt = 0;
        String strN[] = Integer.toBinaryString(n).split("");
        for(String str : strN) if(str.equals("1")) cnt++;
        
        while(true){
            binCnt = 0;
            String strBin[] = Integer.toBinaryString(binN).split("");
            for(String str : strBin) if(str.equals("1")) binCnt++;
            
            if(cnt == binCnt) {
                answer = binN; break;
            }
            binN++;
        }
        return answer;
    }
}

 

strN 배열에 n을 2진수로 변환한 값을 넣고 str이 1이면 cnt++을 해 1의 개수를 구했습니다!

그리고 binN을 2진수로 변환하고 1의 개수를 구해 cnt와 binCnt의 값을 비교해 같으면 answer에 값이 들어가게 했습니다!

결과는~??

성공인 줄 알았으나..

효율성이 떨어지는.... 이슈가 생겼습니다..

어찌할꼬.. 고민하던 중! bitCount라는 멋진 메서드를 발견했습니다!!!

bitCount는 2진수의 1의 개수를 구해주는 이 코딩테스트에서 만능인 메서드입니다!!! 이걸 사용해 코드를 짜봤습니다!

 

class Solution {
    public int solution(int n) {
        int answer = 0, bin = n, binCnt = 0;
        int cnt = Integer.bitCount(n);
        while(binCnt != cnt){
            bin++;
            binCnt = Integer.bitCount(bin);
        }
        return answer = bin;
    }
}

 

 

cnt에 n의 2진수의 1의 개수를 구해주고, while문을 돌려 binCnt에 bin의 2진수의 1의 개수를 구해줬습니다!!

이렇게 했더니!

정확성 테스트 통과!

효율성 테스트 통과!!!!!

정답입니다!!!

 

자바에는 좋은 메서드가 정말 많아요.. 그걸 다 알 수는 없지만 요렇게 하나하나 알아가는 재미가 있지 않습니까~~~

그럼 20000~~~~ O(∩_∩)O