본문 바로가기
Algorithm/프로그래머스 코딩테스트 문제풀이전략

[프로그래머스] Lv.2 이진 변환 반복하기

by 미네구스 2024. 4. 17.

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

 

프로그래머스

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

programmers.co.kr

 

풀이 접근 방법

1. s가 "1"이 될때까지 while문을 돌린다.

2. 0의 개수를 세서 더해준다.

3. s의 길이에서 0의 개수만큼 빼준다.

4. 앞서 3에서 구한 길이를 이진 변환해서 s에 다시 저장한다.

5. 이진 변환한 횟수를 1 더해준다.

 

 

내 코드

import java.util.*;
class Solution {
    public int[] solution(String s) {
        int[] answer = new int[2];
        
        int convert = 1; // 최초 변환할때 포함
        int count = 0;
        while (!s.equals("1")) {
            StringBuilder sb = new StringBuilder();
            boolean flag = false;
            for(int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if (c == '1') sb.append(c);
                else {
                    count++;
                    flag = true; // 0이 하나라도 있으면 true
                }
            }
            
            if (flag) s = sb.toString();
            else { // 0이 없다면 이진 변환 해줘야함
                int n = sb.toString().length();
                s = Integer.toString(n,2);
                convert++;
            }
        }
        answer[0] = convert;
        answer[1] = count;
        return answer;
    }
}

 

🎯 책 풀이

class Solution {
    private int countZeros(String s) {
        int count = 0;
        for(char c : s.toCharArray()) {
            if (c == '0') {
                count++;
            }
        }
        return count;
    }
    public int[] solution(String s) {
        int[] answer = {};
        int convert = 0;
        int removed = 0;
        while(!s.equals("1")) {
            int zeros = countZeros(s);
            removed += zeros;
            
            int len = s.length() - zeros;
            s = Integer.toString(len, 2);
            convert++;
        }
        return new int[]{convert,removed};
    }
}

 

문제 풀이 회고

 

딱히 어려운 문제는 아니였다. 문제에서 핵심은

  1. s가 1이 될때까지 0의 갯수를 세어준다.
  2. 현재 s의 길이에서 0의 갯수를 뺀다.
  3. 그 값을 이진변환해서 다시 s에 저장한다.

이 매커니즘만 이해하고 있으면 될 것 같다. 책 풀이가 내 풀이보다 훨씬 가독성이 좋아서 가져와봤다.