문제
자연수 N이 주어진다. N을 이진수로 바꿔서 출력하는 프로그램을 작성하시오.
n = int(input())
arr = []
def binary(n):
if n == 1:
arr.append(1) # n=1 이면 이진수 변환값은 1
elif n == 2:
arr.append(0)
arr.append(1) #n=2이면 이진수 변환값은 10인데 pop하기위해 01로 저장
else:
arr.append(n%2) #n%2를 먼저 저장하고
binary(n//2) #다시 함수 호출(재귀함수 사용)
binary(n)
for _ in range(len(arr)):
print(arr.pop(), end='') #pop해서 배열 순서 뒤집기
파이썬에는 bin함수가 있지만 재귀함수를 이용해서 푸는 것이 문제의 포인트였던 것 같아 알고리즘을 구현했다. n이 3 이상의 수라면 재귀함수를 이용하여 나머지들을 리스트에 저장하게끔 하였고 n이 2이하라면 직접 이진수값을 배열에 입력하는 식으로 구현했다.
조금 더 한줄 쓰기에 접근하려면 2이하의 수들도 if문 하나로 짤 수 있었겠지만 머리쓰기가 귀찮았다...ㅎ
그리고 배열들을 역순배치를 할까 하다가 역순->int->join 으로 하면 코드가 길어질 것 같아 pop을 이용할 수 있다는 방법을 적용해보았다!!!
재귀함수 아직도 어렵네
'Algorithm' 카테고리의 다른 글
programmers #정수삼각형 (0) | 2021.08.22 |
---|---|
백준 15829번 #Hashing (0) | 2021.08.22 |
programmers #[1차] 비밀지도 (0) | 2021.08.19 |
백준 5692번 #팩토리얼 진법 (0) | 2021.08.17 |
백준 10872 #팩토리얼 (0) | 2021.08.17 |