기록하고 까먹지 말기

이진 변환 반복하기 본문

전공/프로그래머스

이진 변환 반복하기

yha97 2023. 9. 25. 12:29

날짜 : 2023. 09. 25

사용 언어 : python

 

문제

https://school.programmers.co.kr/learn/courses/30/lessons/70129

 

 

코드

def solution(s):
    def change(a):  # a를 2진수로 리턴
        tmp = list()
        while a > 0:
            tmp.append(str(a % 2))
            a = a // 2
        tmp.sort(reverse=True)
        string = ""
        for i in tmp: string += i
        return string
        
    cnt, zero = 0, 0
    while True:
        if s == "1": break
        t = 0  # 0의 개수
        
        # 0 제거
        cnt += 1
        for i in s:
            if i == "0": t += 1
        zero += t  # 제거된 0의 개수 가산
        s = change(len(s)-t)
                 
    answer = [cnt, zero]
    return answer

 

 

풀이

- 입력받은 2진수 s에서 '0'의 개수를 전부 뺀 다음 해당 길이에 대해 2진수로 변환한다.

- 이를 1이 될 때까지 반복해야 하기 때문에 while문을 반복해서 돌리고, 1이 아니라면 위의 과정을 진행, 횟수를 증가시킴과 동시에 0의 개수를 가산한다.

 

 

알게된 점

- 맨 처음 문제를 이해하는 데 조금 시간이 걸렸지만 구현은 문자열을 사용해서 가능했기 때문에 곧바로 풀이가 가능했다.

 

 

참고 사이트

 

'전공 > 프로그래머스' 카테고리의 다른 글

(SQL) 조건에 맞는 사용자와 총 거래금액 조회하기  (0) 2023.09.28
124나라의 숫자  (0) 2023.09.26
N-Queen  (0) 2023.09.13
최솟값 만들기  (0) 2023.09.12
미로 탈출  (0) 2023.06.07