ABOUT ME

Today
Yesterday
Total
  • 수의 체계와 진법 변환
    알고리즘/코딩테스트 개념 공부 2025. 2. 26. 10:28
    깊은 내용까지는 아니고 알고리즘을 풀 정도로 간단하게만 요약할 정도임..ㅎ
    수의 체계를 통해서 진법 변환을 어떻게 하면되는 건지 알아보자

    문제: 백준 2745번

     

    🌈 파이썬 코드

    def solution():
        chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        N, B = input().split()
        result = 0
        for index, value  in enumerate(N[::-1]):
            result += (chars.index(value) * (int(B) ** index))        
        return result
    print(solution())

     

     

    우리가 흔히 사용하는 10진법을 예시로 들어보자.

     

    440이라는 10진법으로 표현된 수가 있다.

    이 440의 구성은 아래와 같다

    (4 * 10^2) + (4 * 10^1) + (0 * 10^0)
    400 + 40 + 0
    = 440

    우리가 흔히 사용되는 10진법으로 표현된 수이다. 그렇다면 비교해서 11(10진수)이라는 값은 2진법으로 어떻게 나오게 되는지 알아보자.

    1101(2진수)
    (1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0)
    8 + 0 + 2 + 1
    = 11

    1101이라는 2진수 값은 10진수로 11로 표현될 수 있다. 두 계산식을 보면 공통적인 사항이 나온다.

    표현하고자하는 진수가 0제곱근에서 시작해서 합으로 나오는 수가 될때까지 값을 구하는 모습을 보인다.

    문제를 보면 문자열이 섞여서 최대 36진수까지 우리는 표현할 수 있다고 나와있으며, 여기서는 최대 진수값인 36으로 문제를 구하려고한다. 즉 특정 진수로 표현된 값을 10진수로 돌리는 것이기에 생각보다 간단하게 문제를 해결할 수 있다.

    특정 진수로 표현된 값은 각 자리수에 진수의 제곱근이 곱해진 형태이기에 주어진 문제인 "ZZZZZ"는 36의 0제곱부터 4제곱까지 각 자리의 index값을 곱한 것을 더한 것으로 구할 수 있었다.

     

    이러한 문제는 어떻게 B진수형태를 10진수로 변환하는지를 보여주며 각 진수형태가 어떻게 구성되어있는지를 알 수 있게 해주었다.

     

    python에서는 이러한 진수형태를 변환하는 것 중 자주 쓰이는(?) 몇 가지에 대해서는 메서드 형태로 제공하고 있다.

    n = 42
    print(format(n, 'b'))  # '101010' (2진수)
    print(format(n, 'o'))  # '52' (8진수)
    print(format(n, 'x'))  # '2a' (16진수, 소문자)
    print(format(n, 'X'))  # '2A' (16진수, 대문자)

    암기하고 사용하면 유용하게 사용될 경우가 나올 것 같다.

     

     

    '알고리즘 > 코딩테스트 개념 공부' 카테고리의 다른 글

    소수 판별 알고리즘  (0) 2025.02.27
    [자료구조] 해시(Hash)  (0) 2025.01.14

    댓글

Designed by Tistory.