처음 시도 했던 코드
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진수로 변화 가능