티스토리 뷰

프로그래머스 '이진 변환 반복하기'입니다.

 

문제 링크

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

 

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

 

programmers.co.kr


● 문제 설명

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

 

 

● 문제 해결 방향

문제 설명에서 주어진 과정에 따라 코드를 만들었습니다.

크게 알고리즘을 구성하는데 어려움은 없었습니다.

 

 

● 문제 해결 코드

def del_zero(s) :
    return ''.join(s.split('0'))

def to_digit(s):
    l = len(s)
    r = ''
    while l:
        r += str(l % 2)
        l //= 2
    
    return r[::-1]


def solution(s):
    zero = 0
    times = 0
    while s != '1':
        times += 1
        d_zero = del_zero(s)
        zero += len(s) - len(d_zero)
        s = to_digit(d_zero)
        
    return [times, zero]

 

  1. x의 모든 0을 제거합니다.
    --> 주어진 문자열에 대해서 모든 0을 지워줍니다.
  2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꿉니다.
    --> 문자열을 길이를 2진법으로 표현해줍니다.

반복문을 통해 '1'이 될 때까지 반복시켜 결과를 return 합니다.

 

● 알게 된 것

.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함