Algorithm/Programmers

[Lv.2] 이진 변환 반복하기 : Java / 이진법 변환 함수

say! 2026. 1. 30. 15:36
728x90
 

프로그래머스

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

programmers.co.kr

 

 x = 0111010

1. x의 모든 0 제거하기 > 1111

2. x의 길이인 c를 2진법으로 표현하기 > c=x.length 4 > 4를 이진수로 100

3.1 될때까지 반복

=> 2진 변환의 횟수, 제거된 모든 0의 개수를 배열에 담아 리턴

 

#예시

01110

0제거 2개, 111, 길이 3 > 이진법 11 

0제거 0개, 11, 길이 2 > 이진법 10

0제거 1개, 1, 길이 1 > 종료

3, 3 리턴

 

#이진법 변환 코드

Java의 Integer.toBinaryString() 함수로 바로 이진법 변환이 가능하긴함.

아래 코드는 직접 이진법 변환하는 자바 함수

>2진수 구하는 법

static String toBinary(int n) {
    StringBuilder sb = new StringBuilder();

    while (n > 0) {
        sb.append(n % 2); // 나머지
        n /= 2;           // 몫
    }

    return sb.reverse().toString();
}

 

 

*StringBuilder의 길이 구하는 법 : 그냥 String처럼 sb.length()하면 됨

*StringBuilder가 "1"인지 비교하는 법 : sb.charAt(0) == '1'

*StringBuilder 비우는 법 : sb.setLength(0);


 

-정답 코드

class Solution {
    public int[] solution(String s) {
        int[] answer = {};
        StringBuilder sb = new StringBuilder(); // 0제거하고 문자열 붙이기
        
        int bnum = 0; // 이진변환 횟수 저장
        int zero = 0; // 0 제거한 횟수 저장
        
        // 1 될때까지 반복
        while(!s.equals("1")){
            bnum++;
            
            sb.setLength(0);    // sb 비우고 시작
            // 0제거하기
            for(int i=0; i<s.length(); i++){
                char c = s.charAt(i);

                if(c == '1'){
                    sb.append(c);
                }
                else{
                    // 제거한 0 개수 저장
                    zero++;
                }
            }   //for문 종료

            // 길이 구하기
            int l = sb.length();
            
            // 이진수 변환하기
            s = Integer.toBinaryString(l);
            
        }   //while문 종료
        
        answer = new int[]{bnum, zero};
        
        
        return answer;
    }
}

'Algorithm > Programmers' 카테고리의 다른 글

💚[Lv.2] 짝지어 제거하기 : Java  (0) 2026.01.30
[Lv.2] 다음 큰 숫자 : Java  (0) 2026.01.30
[Lv.2] JadenCase 문자열 만들기 : Java  (0) 2026.01.28
[Lv.1] k번째 수 : Java  (0) 2025.12.14
[Lv.2] 전화번호 목록 : Java  (0) 2025.12.13