[codeup] 1920 : (재귀함수) 2진수 변환
문제
어떤 10진수 n이 주어지면 2진수로 변환해서 출력하시오.
예)
10 -----> 1010
0 -----> 0
1 -----> 1
2 -----> 10
1024 -----> 10000000000
이 문제는 반복문을 이용하여 풀 수 없습니다.
금지 키워드 : for while goto
입력
10진수 정수 n이 입력된다.
(0<=n<=2,100,000,000)
입력 예시
7
출력
2진수로 변환해서 출력한다.
출력 예시
111
문제 풀이
재귀함수를 무조건 이용해야 하는 부분에서 고민이 많았다.
python 관련하여 여러가지 찾아보니 10진수를 2진수로 변경해주는 함수가 있는 것을 확인했다. (bin(a))
일단 예전에 2진수로 변환하는 방법을 먼저 찾았다.
주어진 숫자를 2로 계속 나누면서 나오는 몫이 1이 될때까지 나눠준다. (혹은 0)
이렇게 나온 나머지에 대해 마지막 1/0 값으로부터 위에서 아래로 자리수를 놔주면 된다.
코드를 작성하다보니, 몫과 나머지의 값을 한꺼번에 구할 수 있는 것을 발견하여 이를 사용하였다. (divmod(a,b))
몫과 나머지의 값을 구해서, 나머지는 계속 리스트에 넣어주고 몫은 계속 나누어주는 과정을 반복했다.
오히려 조금 더 헤맸던 부분은 진수 출력 부분이였다.
리스트 내 값들이 전부 int형이여서 join() 사용이 불가했고,
문제 자체에서도 for문 사용이 불가했기 때문에 해당 리스트의 값을 출력하기가 어려워서, 리스트 내 형식을 전부 str로 변경하고 join()을 사용하여 출력했다.
num = int(input())
def get_binary_number(num,lists):
num1, num2 = divmod(num,2)
lists.append(num2)
if num1 == 0 :
return lists
else:
return get_binary_number(num1,lists)
binary_number_array = []
binary_number = get_binary_number(num,binary_number_array)
binary_number_array.reverse()
binary_number_array_str = list(map(str,binary_number))
print("".join(binary_number_array_str))
Author And Source
이 문제에 관하여([codeup] 1920 : (재귀함수) 2진수 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@woonmong/codeup-1920-재귀함수-2진수-변환저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)