[프로그래머스] 이진 변환 반복하기 파이썬

FFTL:)·2021년 6월 18일
0

이진 변환 반복하기 ( https://programmers.co.kr/learn/courses/30/lessons/70129 )

구현 문제라고 생각이 됩니다. 문제에서 주어진 설명대로 올바르게 구현을 하면 해결이 됩니다.

문제 해결

  • 일단 어떤 방법을 써서든 주어진 문자에서 0을 전부 제거합니다.
  • 제거하고 "1"만 남게된 문자열의 개수를 센 뒤에 그 개수를 2진법으로 표현합니다.
  • 위의 과정을 반복하여 제거된 0의 개수를 리턴합니다.
#제거된 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의 제거 방법만 생각할 수 있다면 쉽게 풀 만한 문제였습니다.

profile
생각하는 개발자가 되자!

0개의 댓글