프로그래머스_이진 변환 반복하기

맹민재·2022년 9월 28일
0

알고리즘

목록 보기
1/134

처음 시도 했던 코드

def solution(s):
    answer = []
    tmp = list(s)
    _delete = 0
    cnt = 0
    while len(tmp) > 1:
        while "0" in tmp:
            _delete += 1
            tmp.remove("0")
        cnt +=1
        tmp = list(str(bin(len(tmp)))[2:])
        
    return [cnt, _delete]

리스트를 순행하면서 0을 찾을때마다 하나씩 지우는 방식이므로 예상 시간복잡도가 O^2으로 생각된다. 단순히 봐도 매우 비효율적인 방법이다.

리스트로 바꾸지 말고 문자열 그대로해서 0을 찾을때마다 지우는것이 아닌 0의 개수를 센 후 0을 모두 지우는 방식으로 변경

def solution(s):
    answer = []
    _delete = 0
    cnt = 0
    while len(s) > 1:
        _delete += s.count("0")
        s = s.replace("0", "")
        cnt +=1
        s = str(bin(len(s)))[2:]
    return [cnt, _delete]

성찰 및 알게 된 것

알고리즘을 풀 때 제한사항을 보고 시간 복잡도를 항상 생각하자
bin() 내장 함수를 통해 10진수를 2진수로 변화 가능

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글