본문 바로가기

문제 풀이/Programmers

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

문제 출처 - Programmers

문제는 여기

 

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

 

programmers.co.kr


[풀이]

1. 문자열이 1이 될 때까지 변환작업을 반복한다.

2. s에서 0을 제거해줘야 하므로 charAt()을 사용해 각 부분이 0인지 체크하고 0이면 0 카운트를 증가시켜준다.

3. 0이 아닌 문자들은 따로 뽑아서 저장해준다.

4. 3. 에서 만들어진 문자열의 길이를 구한다.

5. 4. 에서 구해진 길이를 Integer.toBinaryString()을 사용해 2진수로 변환해준다.

6. 변환 작업 횟수를 증가시켜주고 위 과정을 반복한다.

8. 각 결과를 넣고 출력해준다.

[접근]

1. 문제에서 주어진 순서대로 반복시키면 되겠다고 생각하고 문제를 해결하였다.

[코드]

class Solution {
    public int[] solution(String s) {
        int count = 0; // 변환 횟수
        int zero = 0; // 0 횟수
        int[] answer = new int[2];
        
        // 문자열이 1이 될 때 까지 반복
        while (s.compareTo("1") != 0) {
            String word = ""; // 변환된 문자
            
            // s의 길이만큼 체크
            for (int i = 0; i < s.length(); i++) {
                // 각 부분을 잘라서 체크할 것
                char c = s.charAt(i);
                
                // 0이면
                if (c == '0') {
                    zero++; // 0 횟수 증가
                }
                // 0이 아니면
                else
                    word += c; // 변환된 문자에 추가
            }
            
            // 0을 제거하고 만들어진 새 문자의 길이를 2진수 변환
            // Integer.toBinaryString(int num); ==> 2진수로 변환해줌
            s = Integer.toBinaryString(word.length());
            // 변환 횟수 증가
            count++;
        }
        
        // 결과 담아주기
        answer[0] = count;
        answer[1] = zero;
        
        return answer;
    }
}