조금씩 꾸준히 완성을 향해

[Algorithm] 백준 10829 이진수 변환 with Python 본문

DataStructure & Algorithm/문제풀이

[Algorithm] 백준 10829 이진수 변환 with Python

all_sound 2022. 10. 13. 17:39

문제

자연수 N이 주어진다. N을 이진수로 바꿔서 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 100,000,000,000,000)

출력

N을 이진수로 바꿔서 출력한다. 이진수는 0으로 시작하면 안 된다.

예제 입력 

53

예제 출력 

110101

내가 짠 코드

n = int(input())
res = ''
while n > 0:
    res += str(n % 2)
    n = n //2
print(res[::-1])

구현 자체는 너무 간단해서 딱히 설명할 거리가 없을 것 같다.

n을 2로 나눈 나머지를 문자열에 하나씩 쌓은 후 순서를 뒤집어 주니 이진수가 완성됐다.

 

 

재귀 함수로 구현한 코드

def DFS(x):
    if x==0:
        return
    else:
        DFS(x//2)
        print(x%2, end='')

n=int(input())
DFS(n)

사실 이 문제는 재귀 함수로 구현하는 게 베스트인 것 같다. 내 코드에서처럼 다시 거꾸로 인덱싱할 일 없이 함수 안에서 제대로 정렬이 되기 때문이다. n을 2로 나눈 몫을 다시 인자로 넣어 재귀함수를 호출한 후, print문을 아래로 빼면 출력이 거꾸로 된다. (함수가 재호출되면서 print문들이 스택에 쌓여 함수가 끝나기를 기다리고 있다가 거꾸로 출력)

 

익숙해지기 위해 재귀함수 문제들을 더 많이 접해봐야 겠다. 

 

 

https://www.acmicpc.net/problem/10829

 

10829번: 이진수 변환

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 100,000,000,000,000)

www.acmicpc.net