It's easy, if you try

[프로그래머스] 이진 변환 반복하기 (Java) / 문자열 / 수학 / Stack 본문

알고리즘/자바(Java)

[프로그래머스] 이진 변환 반복하기 (Java) / 문자열 / 수학 / Stack

s5he2 2021. 7. 2. 02:50
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/70129

 

코딩테스트 연습 - 이진 변환 반복하기

 

programmers.co.kr

풀이

import java.util.*;

class Solution {
    public int[] solution(String s) {
        int cnt = 0, zeroCnt = 0; // 이진 변환 횟수, 제거된 0의 개수

        while(!s.equals("1")) { // 1이 될 때까지
            String[] strList = s.split(""); // 문자열을 String 배열로 변환
            for(String str: strList) { 
                if(str.equals("0")) { // 제거될 0의 개수 세기
                    zeroCnt++;
                }
            }
            // step01: s에서 0 제거
            s = s.replace("0","");
            
            // step02: s의 길이를 이진법으로 표현한 문자열로 바꾸기
            int value = s.length(); // s의 길이
            Stack<Integer> st = new Stack<>();
            // value가 4인 경우 st에 001 순서로 push됨.
            while(value > 0) {
                st.push(value % 2);
                value /= 2;
            }
            // 선입후출로 "100" 만들기 (= s의 길이(4)를 이진법으로 표현(100)한 문자열("100")로 바꿈
            s = "";
            while(!st.isEmpty()) {
                s += String.valueOf(st.pop());
            }
            
            cnt++; // 이진 변환 횟수 1 UP
        }
        
        return new int[] {cnt, zeroCnt};
    }
}

문제가 하라는대로 하면 된다!

반응형
Comments