-
수의 체계와 진법 변환알고리즘/코딩테스트 개념 공부 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
= 111101이라는 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