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

Daisy🌷·2023년 6월 26일
0

1. 문제 이해

0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의한다.
1. x의 모든 0을 제거한다.
2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꾼다.
예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100"이 된다.
0과 1로 이루어진 문자열 s가 매개변수로 주어진다. s가 "1"이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성하라.

2. 풀이 계획 및 작성한 코드

  • 입력받은 문자열이 1이 될 때까지 while 반복문을 돌린다.
  • 입력받은 문자열에 있는 0을 ""으로 바꿔서 text 변수에 저장한다.
  • 입력받은 문자열의 길이에서 text의 길이를 빼서 0의 개수를 센다. (+= 으로 누적 계산!)
  • text의 길이를 이진수로 바꿔서 binary 변수에 저장한다.
  • 한 번 반복문이 돌 때마다 count를 1씩 늘려준다.
  • 반복문이 다 돌고 난 후의 count와 countZero를 배열에 담아 return 한다.
public class Solution {
    public int[] solution(String string) {
        int[] answer = {};
        int countZero = 0;
        String binary = "";
        int count = 0;

        while (!string.equals("1")) {
            String text = string.replace("0", "");

            countZero += string.length() - text.length();

            int textLength = text.length();

            binary = Integer.toBinaryString(textLength);

            string = binary;

            count += 1;
        }
        answer = new int[]{count, countZero};

        return answer;
    }
}

3. 기억해두면 좋은 것들

replace( ) 메서드로 문자열 내의 문자 개수 구하는 방법!

💡 replace( ) 메서드

어떤 패턴에 일치하는 일부 또는 모든 부분이 교체된 새로운 문자열을 반환한다. 

string 문자열 안에 들어있는 0의 개수가 궁금할 때!

  1. string 문자열 안에 포함된 모든 0을 ""으로 바꾼다.
  2. string 문자열의 길이에서 0을 모두 없앤 문자열의 길이를 뺀다. 그것의 값이 string 문자열 안에 들어있는 0의 개수가 될 것이다!
 String text = string.replace("0", "");

 countZero += string.length() - text.length();
profile
티스토리로 블로그를 이전했습니다. 😂 구경 오세요! 👉🏻 https://u-ryu-logs.tistory.com

0개의 댓글