이진 변환 반복하기 ( https://programmers.co.kr/learn/courses/30/lessons/70129 )
구현 문제라고 생각이 됩니다. 문제에서 주어진 설명대로 올바르게 구현을 하면 해결이 됩니다.
#제거된 0의 개수를 추가해줄 전역 변수 cnt입니다.
cnt = 0;
#0을 전부 제거하고 제거한 0의 개수를 cnt에 추가해주고
#남은 "1"만남은 문자열의 길이를 리턴해주는 cut함수입니다.
def cut(s):
global cnt;
cnt += s.count("0");
s = s.replace("0","");
return len(s);
#문제해결
def solution(s):
global cnt;
change = 0; #변환 횟수를 담을 change 변수입니다.
answer = [];
key = True; #while문을 멈추게할 key 변수입니다.
while key:
s = cut(s); #cut 함수를 이용해 0을 제거한 뒤 길이를 리턴받습니다.
if s == 1: #이번의 cut으로 받은 리턴값의 길이가 1일 경우 while을 종료합니다.
key = False;
change += 1; #길이가 1이 아닐 경우 변환 횟수를 1 추가해줍니다.
s = bin(s)[2:]; #cut을 통해 리턴받았던 수 S를 이진수로 변환하여 다시 s에 담아줍니다. ([2:] 를 하는 이유는 bin(숫자)를 이용해 이진수로 변환할 경우 0b 접두어가 붙기 때문입니다.
#while을 마치고 구해진 변환 횟수와 0의 개수를 answer에 담아서 답을 return 해줍니다.
answer.append(change);
answer.append(cnt);
return answer;
이진수 변환과 0의 제거 방법만 생각할 수 있다면 쉽게 풀 만한 문제였습니다.