https://school.programmers.co.kr/learn/courses/30/lessons/70129
수로 이루어진 문자열(s)에서 0을 제거한 후 길이를 이진수로 변환(=s)
-> 이 과정을 s가 1이 될 때까지 반복하고, 제거된 0의 총 갯수와 반복된 총 횟수를 반환
def solution(s):
zero, cnt = 0,0
while s!='1':
cnt+=1
l = len(s.replace("0",""))
zero += len(s)-l
tmp = ""
while(l!=1):
tmp+=str(l%2)
l = l//2
tmp+=str(l)
s=tmp[::-1]
return [cnt, zero]
while문 사용해 반복문 돌면서 반복 cnt 세고, 0 갯수 세고, 이진 변환하는 과정을 반복
이진수 구하는 과정에서 문자열을 거꾸로 뒤집기 위해 [::-1]
사용. 이걸 [-1:]
으로 착각했었음
def solution(s):
zero, cnt = 0,0
while s!='1':
cnt+=1
l = len(s.replace("0",""))
zero += len(s)-l
s = bin(l)[2:]
return [cnt, zero]
bin이라는 이진 변환 함수가 있는 걸 이 나이 되도록 몰랐다니. 사실 모르기보단 까먹었을 것
bin()은 10진수를 2진수로 변환해주는 함수로 0b1001
과 같은 식으로 반환하기 때문에 앞 2문자를 자르고 사용해야함 그러기때문에 bin(l)[2:]
로 이진수 구해야함
여기서 0을 replace 하고 길이를 구해도 되지만 그냥 1을 카운트 해서 사용했어도 됨 -> 생각의 전환
0b1001
과 같이 반환되므로 [2:] 필요10진수 -> 2진수 변환 방법
bin = ""
while(dec!=1):
bin = str(dec%2) + bin
dec = dec//2
bin = str(dec) + bin
아래와 같이 이진수 구하는 방법을 코드로 구현해봄
2 | 29 - 1
ㅡ
| 14 - 0
ㅡ
| 7 - 0
ㅡ
| 3 - 1
ㅡ
| 1 - 1
29 -> 111001