-
🔢 진법 변환 알고리즘 비교: Python, C, JavaScript로 알아보기알고리즘 2025. 3. 22. 21:43반응형
진법 변환은 프로그래밍에서 자주 쓰이는 기본 알고리즘입니다.
이번 글에서는 10진수 ↔ 다른 진수(2진수, 8진수, 16진수) 변환을 중심으로 Python, C, JavaScript에서 각각 어떻게 구현하는지 살펴봅니다.
📌 1. 기본 개념: 진법 변환이란?
- 10진수 → N진수: 나눗셈을 반복해서 나머지를 역순으로 나열
- N진수 → 10진수: 각 자리수 × base^index를 모두 더함
🐍 Python에서 진법 변환
Python은 내장 함수로 간단하게 변환할 수 있고, 알고리즘을 직접 구현할 수도 있어요.
✅ 10진수 → 2/8/16진수
print(bin(13)) # 0b1101 print(oct(13)) # 0o15 print(hex(13)) # 0xd
✅ 2/8/16진수 → 10진수
print(int('1101', 2)) # 13 print(int('15', 8)) # 13 print(int('D', 16)) # 13
✅ 알고리즘 직접 구현 (10진수 → N진수)
def decimal_to_base(n, base): digits = "0123456789ABCDEF" result = '' while n > 0: result = digits[n % base] + result n //= base return result or '0' print(decimal_to_base(13, 2)) # 1101
💻 C 언어에서 진법 변환
C에서는 내장 함수가 없기 때문에 직접 구현해야 합니다.
✅ 10진수 → N진수
#include <stdio.h> void decimal_to_base(int n, int base) { char digits[] = "0123456789ABCDEF"; char result[32]; int index = 0; if (n == 0) { printf("0"); return; } while (n > 0) { result[index++] = digits[n % base]; n /= base; } // 역순 출력 for (int i = index - 1; i >= 0; i--) { printf("%c", result[i]); } } int main() { decimal_to_base(13, 2); // 출력: 1101 return 0; }
✅ N진수 → 10진수
#include <stdio.h> #include <string.h> #include <math.h> int base_to_decimal(const char *s, int base) { int len = strlen(s); int result = 0; for (int i = 0; i < len; i++) { char c = s[len - i - 1]; int digit = (c >= 'A') ? (c - 'A' + 10) : (c - '0'); result += digit * pow(base, i); } return result; } int main() { printf("%d", base_to_decimal("1101", 2)); // 출력: 13 return 0; }
🌐 JavaScript에서 진법 변환
JavaScript도 내장 메서드를 제공해서 간편합니다.
✅ 10진수 → N진수
console.log((13).toString(2)); // "1101" console.log((13).toString(8)); // "15" console.log((13).toString(16)); // "d"
✅ N진수 → 10진수
console.log(parseInt("1101", 2)); // 13 console.log(parseInt("15", 8)); // 13 console.log(parseInt("D", 16)); // 13
✅ 알고리즘 직접 구현 (10진수 → N진수)
function decimalToBase(n, base) { const digits = "0123456789ABCDEF"; let result = ''; if (n === 0) return '0'; while (n > 0) { result = digits[n % base] + result; n = Math.floor(n / base); } return result; } console.log(decimalToBase(13, 2)); // "1101"
📝 정리
기능 Python C JavaScript
10 → N진수 bin(), hex(), 직접 구현 직접 구현 필요 toString(base) N진수 → 10 int(str, base) 직접 구현 필요 (pow, 문자처리) parseInt(str, base) 사용 난이도 ★☆☆ (매우 쉬움) ★★★ (직접 구현 필요) ★☆☆ (간단함) 반응형'알고리즘' 카테고리의 다른 글
Nodejs Shift vs pop (백준 2164번) (0) 2025.03.14