ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 🔢 진법 변환 알고리즘 비교: 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
Designed by Tistory.