이진 반복 변환하기

우하학·2024년 11월 11일

프로그래머스

목록 보기
10/14
post-thumbnail

문제요약

이진수로 이뤄진 문자열을 주면 0을 모두 없앤 문자열의 길이를 다시 이진수로 만들어 다시 이진수로 만든 문자열이 1이 될 때까지 반복하며 몇번 반복하고, 0을 총 몇번 지웠는지 체크하기

오류코드

def solution(s):
    cnt = 0
    zero = 0
    while s!="1":
        print(s)
        before_len = len(s)
        after_len = 0
        for i in s:
            if s == "1":
                after_len+=1
        zero += before_len - after_len
        s = format(after_len, 'b')
        cnt += 1
        
    return [cnt, zero]

쉽게 하긴 했으나... 자꾸 시간 초과가 된다 ;;;
그래서 보니까 문자열 내에서 0을 찾는 게 for문으로 하다보니 시간이 너무 오래걸린다는 것을 알았다 ..

그래서 문자열 내에서 0을 찾는 방법을 검색하고 정답으로 제출하였다 !

정답코드

def solution(s):
    cnt = 0
    zero = 0
    while s != "1":
        after_len = len(s) - s.count("0")
        zero += s.count("0")
        s = format(after_len, 'b')
        cnt += 1

    return [cnt, zero]

count를 잊고 있었네 ...

기억해야 할 함수

  1. 문자열.count() : 문자열에 어떤 문자가 몇번 들어있는 지 찾는 내장 함수이다
  2. format(십진수, 'b') : 십진수를 이진수로 바꾸는 내장 함수
profile
코린이 탈출기

0개의 댓글