프로그래머스

[프로그래머스] 이진 변환 반복하기 (JAVA)

코 밑 2025. 1. 25. 18:42
Contents

https://school.programmers.co.kr/learn/courses/30/lessons/70129?language=java

 

프로그래머스

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

programmers.co.kr

 

 

이진 변환법을 이용한 문제다.

주어진 문자열 x에 대하여

 

1. x의 모든 0을 제거한다.

2. 0을 제거한 문자열 x를 2진법으로 변환한다.

 

예로 x = "01110101"이 주어졌다고 치자

0 제거 -> 1111

이진변환 -> 100

 

이런 과정을 계속 거치게 된다.

이 과정은 1이 남을 때까지 반복해 이진 변환의 횟수와 제거된 0의 개수를 반환한다.

 

예시

 

// 프로그래머스 이진 변환 반복하기
// 0 제거 후 남은 1의 길이 -> 이진 변환 반복
import java.util.*;

class Solution {
    public int[] solution(String s) {
        // 이진 변환 턴 회수, 제거한 0의 개수
        int turn = 0, del = 0;
        // s의 길이가 1보다 클 때만 반복
        while (s.length() > 1) {
            String tmp = "";
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '0') {
                    del++;
                    continue;
                }
                tmp += s.charAt(i);
            }
            s = Integer.toBinaryString(tmp.length());
            turn++;
        }

        return new int[] { turn, del };
    }
}

 

주어진 문자열의 길이가 1 미만이 될 때까지 반복되게 while문을 사용했다.

문자열의 0이 제거될 때마다 del(제거된 0의 개수)을 증가시키고

tmp(변환 횟수)에는 0이 제거되어 1만 남은 문자열을 넣어

Integer.toBinaryString 메소드를 이용해 이진 변환을 진행하고 turn을 증가시켰다.

 

마지막으로 이진 변환의 횟수와 제거된 0의 개수를 반환했다.