[JAVA]

[프로그래머스 JAVA] 다음 큰 숫자 문제 풀이

미냠 2023. 11. 18. 14:55
반응형

이번에도 메소드를 활용하면 쉽게 풀이할 수 있는 문제이다. 

 

 

입력받은 수보다 크고, 이진수로 변환 했을 때의 1의 갯수가 같아야하는 자연수를 구하는 문제이다. 

 

 

 

처음엔 입력받은 수를 이진수로 변환하여 1의 개수를 세고 

반복문을 돌려서 1의 개수와 같으면서 입력받은 수보다 큰 값을 추출해내야 하나 했는데..

그럼 당연히 효율성 테스트에서 떨어질 것을 직감했다.

 

그래서 bitCount라는 메소드를 활용해서 코드를 작성했다. 

bitCount(a)는 a라는 Integer형 변수를 이진수로 변환한 값에서 1의 갯수를 확인하는 메소드다. 

 

이 메소드를 활용하면 

1. 입력받은 변수 bitCount 확인

2. 무한 루프 반복문으로 입력받은 변수에 +1 씩하면서 bitCount 확인

3. bitCount가 동일하면 break 반복문 탈출 

이렇게 하면 효율성 테스트에서도 무리 없이 토옹과 

 

class Solution {
    public int solution(int n) {
        int answer = 0;
        // 1 개수 확인 
        int cnt = Integer.bitCount(n);
        // System.out.println(cnt);
        
        while (true) {    
            // 입력받은 수를 1씩 증가
            n++;
            // System.out.println(n);            
            // 증가한 수의 1 개수 확인
            int nextCnt = Integer.bitCount(n);
            // System.out.println(nextCnt);            
            // 입력받은 수와 증가된 수의 1의 개수가 맞으면 반복문 탈출
            if (cnt == nextCnt) {
                break;
            }
        }
        answer = n;
        return answer;
    }
}

 

 

반응형