Coding Test/JAVA 코딩테스트 풀이정리(프로그래머스)

프로그래머스 스쿨(Java - Lv.2) - 이진 변환 반복하기[긴string처리 / 이진변환]
깝몬 2025. 7. 20. 09:18

문제

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

 

 

해답

class Solution {
    int zeroCnt = 0;
    int convCnt = 0;
    
    public int[] solution(String s) {
        while(s.length()>1){
            s=deleteZero(s);
        }
        return new int[]{convCnt,zeroCnt};
    }
    
    public String deleteZero(String p_s){
        String[] splArr = p_s.split("");
        int oneLen = 0;
        for(String num : splArr){
            if(num.equals("0"))
                zeroCnt++;
            else
                oneLen++;
        }
        return tenToTwo(oneLen);
    }
    
    public String tenToTwo(int oneLen){
        StringBuilder temp = new StringBuilder();
        int divider = 2;
        
        while(oneLen>0){
            if(oneLen%divider==1){
                temp.append("1");
            }else{
                temp.append("0");
            }
            oneLen/=2;
        }
        convCnt++;
        return temp.reverse().toString();
    }
}

 

 

해설

이진변환을 할때 0을 뒤에서 부터 붙이는데 stringbuilder에 해당기능이 존재하지않아

끝까지 작성 후 reverse 메서드로 역순으로 바꾸어 주었다.

 

그외엔 특별한 내용이 없는것으로 보이는 문제