Coding Test/Programmers

[JAVA][Programmers] 다음 큰 숫자⭐️⭐️

예롱메롱 2025. 3. 8. 15:23
728x90
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 접근 방식

  1. n을 2진수로 변환하고 1의 개수를 구합니다.
  2. n을 1씩 증가시키면서 1의 개수가 같은지 확인합니다.
  3. 최소한의 연산으로 Integer.toBinaryString()과 countOnes() 함수를 활용하여 해결합니다.

✅ PASS CODE

class Solution {
    public int solution(int n) {
        int count = countOnes(binary(n)); // 현재 n의 1의 개수
        while(countOnes(binary(++n)) != count); // 1의 개수가 같을 때까지 증가
        return n;
    }

    // 2진수 변환 함수
    public String binary(int n) {
        return Integer.toBinaryString(n);
    }

    // 1의 개수 세는 함수
    public int countOnes(String str) {
        int cnt = 0;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '1') {
                cnt++;
            }
        }
        return cnt;
    }
}

💡 코드 설명

🔹 binary(n)

  • Integer.toBinaryString(n)을 사용하여 정수를 2진수 문자열로 변환합니다.

🔹 countOnes(str)

  • 2진수 문자열을 순회하며 '1'의 개수를 센 후 반환합니다.

🔹 solution(n)

  1. n의 1의 개수를 구합니다.
  2. n을 1씩 증가시키며 1의 개수가 같아질 때까지 반복합니다.
  3. 조건을 만족하는 가장 작은 n을 반환합니다.

🔥 최적화 코드

Integer.bitCount() 활용

class Solution {
    public int solution(int n) {
        int count = Integer.bitCount(n); // 현재 n의 1 개수
        while (Integer.bitCount(++n) != count); // 1 개수가 같을 때까지 증가
        return n;
    }
}

✅ 개선된 점

  • binary() 및 countOnes() 함수 제거 → 코드가 더 짧고 직관적
  • Integer.bitCount(n) → 1의 개수를 더 빠르게 계산
  • 최대 1,000,000까지 가능하므로 시간 복잡도 최적화

😊 느낀 점

처음에는 직접 2진수를 구하려 했지만, Integer.toBinaryString(n) 을 사용하니 훨씬 간결해졌습니다. Integer.bitCount(n)을 사용하면 더 효율적으로 1의 개수를 셀 수 있다는 것도 알게되었습니다. 

 

728x90
반응형