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

작성자 : 조회수 :

소요시간 : 25

 

 

1레벨 문제를 풀었습니다 아이디어는 주석처리했습니다.

 

package Question;

import java.util.ArrayList;

import java.util.Arrays;

/**

 * 프로그래머스 이진 변환 반복하기

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

 *

 * 아이디어

 * 1. while 반복하면됨 무조건 1 하나 남음

 * 2. 배열을 순차 배열로 돌면서 0 제거 제거하면서 int 개수 올리기

 * 3. 순서대로 돌려가며 0 제거

 * 4. 0 제거된 1 길이를 이진법으로 변환

 * 5. 2진법으로 변환된 문자열을 다시 반복

 * 6. 회차가 돌때마다 1

 * */

public class BinaryRepeat {

    public static void main(String[] args) {

        System.out.println(Arrays.toString(solution("110010101001")));

    }

    /**

     * @return [ 반복한 회차, 제거된 0 개수]

     * */

    public static int[] solution(String s) {

        int zeroCount = 0;

        int loopCount = 0;

        ArrayList<Character> characters;

        while (!s.equals("1")){

            characters = new ArrayList<>();

            // 0 제거 공정

            for (int i = 0; i < s.length(); i++) {

                if(s.charAt(i) == '1'){

                    characters.add(s.charAt(i));

                }else{

                    zeroCount++;

                }

            }

            // 남은 길이

            s = Integer.toBinaryString(characters.size());

            System.out.println(" 체크 : " + s);

            if(s.equals("1")){

                loopCount++;

                break;

            }else{

                loopCount++;

            }

        }

        return new int[]{loopCount , zeroCount};

    }

}