본문 바로가기
Algorithm/Programmers Java

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

by 제우제우 2024. 10. 13.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코딩테스트 연습 > 월간 코드 챌린지 시즌1 > 이진 변환 반복하기

 

난이도: LEVEL2

알고리즘 유형: 구현(10진수 → 2진수)

 

정답 코드 

class Solution {
    static int cnt = 0;
    static int deleteCount = 0;
    public int[] solution(String s) {
        change(s);
        int[] answer = {cnt, deleteCount};
        return answer;
    }
    public static void change(String cur){
        if(cur.equals("1")) return;
        cnt++;
        int cnt1 = 0; // 0의 개수 
        int cnt2 = 0; // 1의 개수 
        for(int i = 0; i < cur.length(); i++){
            if(cur.charAt(i) == '0') cnt1++;
            else cnt2++;
        }
        deleteCount += cnt1;
        change(toBinary(cnt2));
    }
    public static String toBinary(int n){
        StringBuilder sb = new StringBuilder();
        while(n >= 2){
            sb.append(n % 2);
            n /= 2;
        }
        sb.append(n);
        return sb.reverse().toString();
    }
}