[codeup] 1920 : (재귀함수) 2진수 변환

SUNGJIN KIM·2021년 11월 26일
0

CODEUP

목록 보기
12/76
post-thumbnail

문제

어떤 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))
profile
#QA #woonmong

0개의 댓글