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

2025. 3. 8. 15:23·Coding Test/Programmers
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
반응형
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Programmers' 카테고리의 다른 글

[JAVA][Programmers] 멀리 뛰기 ⭐️  (0) 2025.03.12
[SQL][Programmers] 동물의 아이디와 이름  (0) 2025.03.11
[SQL][Programmers] 동물의 아이디와 이름  (1) 2025.03.04
[SQL][Programmers] 여러 기준으로 정렬하기  (0) 2025.03.04
[SQL][Programmers] 가장 비싼 상품 구하기  (0) 2025.03.04
'Coding Test/Programmers' 카테고리의 다른 글
  • [JAVA][Programmers] 멀리 뛰기 ⭐️
  • [SQL][Programmers] 동물의 아이디와 이름
  • [SQL][Programmers] 동물의 아이디와 이름
  • [SQL][Programmers] 여러 기준으로 정렬하기
예롱메롱
예롱메롱
  • 예롱메롱
    예롱이의 개발 블로그
    예롱메롱
  • 전체
    오늘
    어제
    • 전체보기 (274)
      • 프로젝트 (35)
        • Wedle (12)
        • 인스타그램 클론 코딩 (13)
        • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (10)
      • 인프런 Spring 강의 정리 (79)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (7)
        • Spring 핵심 원리 - 기본편 (9)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (8)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (11)
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리.. (6)
        • 실전! 스프링 부트와 JPA 활용2 - API 개.. (5)
        • 실전! 스프링 데이터 JPA (7)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (11)
        • 실전! Querydsl (8)
      • Cloud (3)
      • Spring (6)
        • spring boot (5)
        • 소셜로그인 (1)
      • Docker (2)
      • DevOps (0)
      • Coding Test (114)
        • Programmers (37)
        • Baekjoon (76)
      • KB It's Your Life 6기 (1)
      • CS (18)
        • 알고리즘 (13)
        • 컴퓨터 구조 (1)
        • Operating System (0)
        • Network (0)
        • Database (4)
      • git (1)
      • Language (15)
        • Java (5)
        • C++ (6)
        • Python (4)
    • GITHUB GITHUB
    • INSTAGRAM INSTAGRAM
  • hELLO· Designed By정상우.v4.10.3
예롱메롱
[JAVA][Programmers] 다음 큰 숫자⭐️⭐️
상단으로

티스토리툴바