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

2021. 3. 20. 21:04·알고리즘

문제 설명

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 함수를 완성해주세요.


제한사항

  • s의 길이는 1 이상 150,000 이하입니다.
  • s에는 '1'이 최소 하나 이상 포함되어 있습니다.

입출력 예

sresult

"110010101001" [3,8]
"01110" [3,3]
"1111111" [4,1]

입출력 예 설명

입출력 예 #1

  • "110010101001"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.

회차이진 변환 이전제거할 0의 개수0 제거 후 길이이진 변환 결과

1 "110010101001" 6 6 "110"
2 "110" 1 2 "10"
3 "10" 1 1 "1"
  • 3번의 이진 변환을 하는 동안 8개의 0을 제거했으므로, [3,8]을 return 해야 합니다.

입출력 예 #2

  • "01110"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.

회차이진 변환 이전제거할 0의 개수0 제거 후 길이이진 변환 결과

1 "01110" 2 3 "11"
2 "11" 0 2 "10"
3 "10" 1 1 "1"
  • 3번의 이진 변환을 하는 동안 3개의 0을 제거했으므로, [3,3]을 return 해야 합니다.

입출력 예 #3

  • "1111111"이 "1"이 될 때까지 이진 변환을 가하는 과정은 다음과 같습니다.

회차이진 변환 이전제거할 0의 개수0 제거 후 길이이진 변환 결과

1 "1111111" 0 7 "111"
2 "111" 0 3 "11"
3 "11" 0 2 "10"
4 "10" 1 1 "1"
  • 4번의 이진 변환을 하는 동안 1개의 0을 제거했으므로, [4,1]을 return 해야 합니다.

나의 풀이

1. 문자열에서 0 제거하기

2. 이진 변환하기

3. 문자열의 길이가 1이 될때까지 반복하기

 

public int[] solution(String s) {
        int[] answer = new int[2];
        int zeroCount = 0;
        int binaryCount = 0;
        while (true) {

            if (s.length() == 1) { // 문자열의 길이가 1일 경우 break
                break;
            }

            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '0') {
                    zeroCount++; // 문자가 0일경우 count 증가
                }
            }

            s = s.replaceAll("0", ""); // 0을 모두 공백으로 변경

            int binaryStr = s.length();

            s = Integer.toBinaryString(binaryStr); // 문자열의 길이를 이진수로 변환
            binaryCount++;
        }
        
        answer[0] = binaryCount;
        answer[1] = zeroCount;

        return answer;
    }

'알고리즘' 카테고리의 다른 글

[프로그래머스] 위클리 챌린지 - 부족한 금액 계산하기  (0) 2021.08.03
[프로그래머스] 찾아라 프로그래밍 마에스터 - 폰켓몬 풀이  (0) 2021.05.21
[프로그래머스] Level2 - 소수 찾기  (0) 2021.03.18
[프로그래머스] Level2 - 다리를 지나는 트럭  (0) 2020.09.18
[프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임  (0) 2020.07.16
'알고리즘' 카테고리의 다른 글
  • [프로그래머스] 위클리 챌린지 - 부족한 금액 계산하기
  • [프로그래머스] 찾아라 프로그래밍 마에스터 - 폰켓몬 풀이
  • [프로그래머스] Level2 - 소수 찾기
  • [프로그래머스] Level2 - 다리를 지나는 트럭
HWBB
HWBB
흥미주도개발자
  • HWBB
    코딩공부방
    HWBB
  • 전체
    오늘
    어제
    • 분류 전체보기 (164)
      • 알고리즘 (61)
      • Android (27)
      • Kotlin (0)
      • Java (2)
      • Design Pattern (2)
      • React Native (1)
      • Python (0)
      • TIL (21)
      • Unity (0)
      • React (2)
      • AWS (0)
      • Git (11)
      • MFC (1)
      • Spring (4)
      • Computer Science (4)
      • Vue (4)
      • Infra (6)
      • 박현우 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 승윤이
  • 공지사항

  • 인기 글

  • 태그

    algorithm
    Android
    baekjoon
    알고리즘
    깃허브
    AWS
    Java
    GIT
    android studio
    Kotlin
    프로그래머스
    자바
    코딩테스트
    안드로이드
    안드로이드 스튜디오
    백준
    코틀린
    coding
    github
    programmers
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
HWBB
[프로그래머스] LEVEL 2 - 이진 변환 반복하기
상단으로

티스토리툴바