알고리즘/프로그래머스

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

wookcode 2021. 6. 9. 22:34
728x90
반응형

문제

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

 

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

 

programmers.co.kr

 

코드

def solution(s):
    answer = []
    result = ""
    count = 0
    while_count = 0
    while s != "1":
        list_s = list(s)
        s = format(list_s.count("1"), 'b')
        count += list_s.count("0")
        while_count += 1
    return [while_count, count]

맨처음에는 while문 안에 for문을 돌면서 s 문자열 한개한개 확인해 "1"일 경우 따른 문자열에 추가하고 이런식으로 접근하였는데 당연히 시간초과가 나게 되어서 다른 접근방식을 생각해 보았다.

 

문자열을 리스트로 만들면 count함수를 사용해 갯수를 구할 수 있게되고 그러면 그 갯수로 문자열에 길이를 파악할 수 있으니 문자열에 길이를 2진수로 바꿔줘 반복해주면 된다.

 

2진수로 바꾸는 방법은 bin()과 format(10진수, 'b')방법이 있는데 bin을 사용할 경우 0b가 붙어나오기 때문에 format 방법을 사용하였다.

반응형