
10진수를 2진수로 변환하는 파이썬 코드는 몇 가지 방법이 있다. 가장 흔하고 이해하기 쉬운 방법은 반복문을 사용하는 것이고, 파이썬 내장 함수를 활용하거나 재귀 함수를 이용할 수도 있다.
#1. 반복문을 이용한 방법
가장 기본적인 방법으로, 10진수를 2로 나누는 과정을 반복하고 나머지를 역순으로 이어 붙입니다.
def decimal_to_binary_loop(decimal):
if decimal == 0:
return '0'
binary_string = ''
while decimal > 0:
remainder = decimal % 2
binary_string = str(remainder) + binary_string
decimal //= 2
return binary_string
# 사용 예시
print(decimal_to_binary_loop(13)) # 출력: 1101
print(decimal_to_binary_loop(255)) # 출력: 11111111
코드 분석
- if decimal == 0:
- 입력된 10진수가 0일 경우, 2진수도 0이므로 즉시 '0'을 반환합니다. 이는 재귀나 반복문 처리를 시작하기 전에 예외 케이스를 간단하게 처리하는 부분입니다.
- binary_string = ''
- 2진수 결과를 저장할 빈 문자열을 초기화합니다. 이 변수에 계산된 2진수의 각 자릿수가 하나씩 추가됩니다.
- while decimal > 0:
- 주요 로직이 실행되는 반복문입니다. 10진수 값이 0보다 클 동안 계속해서 반복합니다. 2로 계속 나누다 보면 결국 몫이 0이 되므로, 이 조건은 반복을 멈추는 역할을 합니다.
- remainder = decimal % 2
- 10진수를 2로 나눈 나머지를 구합니다. 2진수는 2로 나눈 나머지가 0 또는 1이 되므로, 이 나머지가 2진수의 각 자릿수가 됩니다.
- binary_string = str(remainder) + binary_string
- 이 부분이 핵심입니다. 위에서 구한 나머지를 문자열로 변환하고, binary_string의 앞에 붙입니다. 10진수를 2진수로 변환할 때 나머지는 거꾸로 읽어야 올바른 2진수가 되는데, 이 코드는 str(remainder) + binary_string를 통해 나머지를 계속 문자열의 맨 앞에 추가함으로써 자동으로 순서를 뒤집는 효과를 냅니다.
- decimal //= 2
- 10진수 값을 2로 나눈 정수 몫으로 업데이트합니다. 이는 다음 반복 단계에서 처리할 새로운 10진수 값이 됩니다.
- return binary_string
- 반복문이 종료되면, 최종적으로 완성된 2진수 문자열을 반환합니다.
동작 원리 예시 (입력: 13)
- decimal = 13. binary_string = ''.
- 반복 1:
- remainder = 13 % 2 = 1.
- binary_string = '1' + '' = '1'.
- decimal = 13 // 2 = 6.
- 반복 2:
- remainder = 6 % 2 = 0.
- binary_string = '0' + '1' = '01'.
- decimal = 6 // 2 = 3.
- 반복 3:
- remainder = 3 % 2 = 1.
- binary_string = '1' + '01' = '101'.
- decimal = 3 // 2 = 1.
- 반복 4:
- remainder = 1 % 2 = 1.
- binary_string = '1' + '101' = '1101'.
- decimal = 1 // 2 = 0.
- decimal이 0이 되었으므로 반복문 종료.
- 최종 결과 '1101' 반환.
#2. 파이썬 내장 함수 bin() 이용
파이썬에는 10진수를 2진수로 바로 변환해주는 bin() 함수가 있습니다. 이 함수는 결과 앞에 '0b' 접두사를 붙여주는데, 슬라이싱을 이용해 이 접두사를 제거할 수 있습니다.
def decimal_to_binary_bin(decimal):
return bin(decimal)[2:]
# 사용 예시
print(decimal_to_binary_bin(13)) # 출력: 1101
print(decimal_to_binary_bin(255)) # 출력: 11111111
코드 분석
- bin(decimal)
- 이 부분이 함수의 핵심입니다. bin() 함수는 정수(10진수)를 인자로 받아 해당 숫자의 2진수 표현을 문자열로 반환합니다.
- 예를 들어, bin(13)은 '0b1101'을 반환합니다. 여기서 '0b'는 이 문자열이 2진수임을 나타내는 접두사입니다.
- [2:]
- 이것은 파이썬의 슬라이싱(slicing) 문법입니다. 문자열의 인덱스 2번부터 끝까지 잘라낸다는 의미입니다.
- bin(decimal)이 반환하는 문자열 '0b1101'에서, 인덱스 0은 '0', 인덱스 1은 'b'입니다. 슬라이싱 [2:]는 이 두 문자를 제거하고, 2진수를 나타내는 '1101'만 남깁니다.
- return bin(decimal)[2:]
- bin() 함수로 2진수 문자열을 얻고, 이 문자열에서 '0b' 접두사를 제거한 후 최종 결과를 반환합니다.
동작 원리 예시 (입력: 13)
- decimal = 13
- bin(13)이 호출되어 2진수 문자열 '0b1101'을 반환합니다.
- 슬라이싱 [2:]가 '0b1101'에 적용됩니다.
- 결과로 '1101'이 남고, 이 값이 반환됩니다.
#3. 재귀 함수를 이용한 방법
함수가 자기 자신을 호출하는 재귀를 사용해 구현할 수도 있습니다.
def decimal_to_binary_recursive(decimal):
if decimal == 0:
return ''
else:
return decimal_to_binary_recursive(decimal // 2) + str(decimal % 2)
# 사용 예시
print(decimal_to_binary_recursive(13)) # 출력: 1101
print(decimal_to_binary_recursive(255)) # 출력: 11111111
decimal_to_binary_recursive 함수는 재귀(recursion)를 사용해 10진수를 2진수로 변환하는 코드입니다. 재귀는 함수가 자기 자신을 호출하는 프로그래밍 기법으로, 특정 조건이 만족될 때까지 반복적으로 실행되는 특징을 가집니다.
코드 분석
- if decimal == 0:
- 이 부분은 재귀의 종료 조건입니다. 10진수를 2로 계속 나누다 보면 결국 몫이 0이 되는 시점이 오는데, 이때 재귀 호출을 멈추고 빈 문자열을 반환합니다. 이 조건이 없으면 함수가 무한히 자신을 호출해 오류가 발생합니다.
- else:
- decimal이 0이 아닐 경우, 이 부분이 실행됩니다.
- return decimal_to_binary_recursive(decimal // 2) + str(decimal % 2)
- 이 문장은 두 개의 중요한 연산으로 구성됩니다.
- decimal_to_binary_recursive(decimal // 2): 현재 10진수 값을 2로 나눈 몫을 가지고 함수 자신을 다시 호출합니다. 이 과정이 반복되면서, 몫이 0이 될 때까지 계속해서 함수가 쌓이게 됩니다.
- str(decimal % 2): 현재 10진수 값을 2로 나눈 나머지를 문자열로 변환합니다. 2진수는 2로 나눈 나머지가 0 또는 1이므로, 이 값이 2진수의 각 자릿수가 됩니다.
동작 원리 예시 (입력: 13)
재귀 함수는 실행 순서가 거꾸로 진행되므로 스택(stack) 구조와 비슷하게 생각하면 이해하기 쉽습니다.
- decimal_to_binary_recursive(13) 호출:
- decimal_to_binary_recursive(6) 호출 + str(13 % 2) (즉, "1")
- decimal_to_binary_recursive(6) 호출:
- decimal_to_binary_recursive(3) 호출 + str(6 % 2) (즉, "0")
- decimal_to_binary_recursive(3) 호출:
- decimal_to_binary_recursive(1) 호출 + str(3 % 2) (즉, "1")
- decimal_to_binary_recursive(1) 호출:
- decimal_to_binary_recursive(0) 호출 + str(1 % 2) (즉, "1")
- decimal_to_binary_recursive(0) 호출:
- 종료 조건(decimal == 0)에 따라 빈 문자열 ''를 반환하고 재귀가 끝납니다.
이제 반환된 값들이 역순으로 합쳐지기 시작합니다.
- '' + "1" = "1"
- "1" + "1" = "11"
- "11" + "0" = "110"
- "110" + "1" = "1101"
최종적으로 **"1101"**이 반환됩니다. 이 방법은 나눗셈과 나머지 연산으로 2진수를 구하고, 재귀 호출을 통해 나머지를 역순으로 합치는 효과를 냅니다.
#4. f-string 포맷팅 이용
파이썬의 f-string을 이용해 2진수 포맷으로 변환할 수도 있습니다.
def decimal_to_binary_fstring(decimal):
return f"{decimal:b}"
# 사용 예시
print(decimal_to_binary_fstring(13)) # 출력: 1101
print(decimal_to_binary_fstring(255)) # 출력: 11111111
코드 분석
- f"{decimal:b}": 이것은 파이썬의 f-string 포맷팅 문법입니다.
- f"...": 문자열 앞에 f를 붙여서 f-string을 만듭니다. f-string은 문자열 안에 변수나 표현식을 직접 삽입할 수 있게 해줍니다.
- {decimal:...}: 중괄호 {} 안에 변수 decimal을 넣습니다.
- :b: 콜론(:) 뒤에 오는 포맷 지정자입니다. b는 binary를 의미하며, 해당 숫자를 2진수 형식으로 변환하라고 지시합니다.
f"{decimal:b}"는 "변수 decimal의 값을 2진수(binary)로 포맷팅하여 문자열로 만들어라"는 뜻입니다. 이 방법은 내부적으로 효율적인 C 언어 함수를 사용하므로, 반복문이나 재귀 함수보다 빠를 수 있습니다.
동작 원리 예시 (입력: 13)
- decimal 변수에 값 13이 할당됩니다.
- f"{13:b}" 표현식이 평가됩니다.
- 파이썬은 13을 2진수 포맷에 따라 1101이라는 문자열로 변환합니다.
- 최종적으로 '1101' 문자열이 반환됩니다.

'파이썬(문제풀이)' 카테고리의 다른 글
| 파이썬 준이의 평균 점수 (0) | 2025.09.12 |
|---|---|
| 파이썬 대소문자 바꿔서 출력하기 (0) | 2025.09.11 |
| 파이썬 2025년 a월 b일은 무슨 요일인지? (0) | 2025.09.11 |
| 파이썬 숫자가 주어지면 소수인지 아닌지 판별 (0) | 2025.09.10 |
| 파이썬 구구단 출력 (0) | 2025.09.09 |