티스토리 뷰
https://www.acmicpc.net/problem/11005
11005번: 진법 변환 2
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
문제 풀이
처음에 생각한 방법은 수학 식을 찾으려고 애썼다. 진법 변환 1 문제에서 ZZZZZ 36은 35*36^4 + 35*36^3 + 35*36^2 + 35*36^1 + 35*36^0 = 60466175라는 점을 이용해서 35는 미지수 x라고 정의하고, 아래처럼 식을 만들어 봤다.
60466175=36nx+36x−1x+⋯+361x+360x
하지만 이 식의 문제는 구해야 하는 문자가 전부 동일하다고 가정하고 만들었다는 점이다. 그래서 다른 방법이 없나 싶어 고민하다가 2진수를 어떻게 10진수로 변환하고, 10진수를 2진수로 만들었는지 찾아보다가 힌트를 얻었다.
사실 이 문제도 B에 입력된 수를 기준으로 진법 변환 해준 것이기 때문에 10진수를 b진수로 바꿔주면 되겠다고 생각했다.
코드는 아래와 같고, 진법 변환의 방법은 해당 블로그를 방문하면 된다.
n,b = map(int,input().split())
arr = []
number = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
while True:
remainder = n % b
arr.append(number[remainder])
n //= b
if n == 0:
break
for i in range(len(arr)-1,-1,-1):
print(arr[i],end='')
위 코드처럼 b진수로 나눈 n의 나머지가 변환된 수이다. 이 수들을 인덱스로 활용하여 찾게 된 문자를 리스트에 저장했다. 리스트에 저장된 문자들은 완벽하게 변환시키기 위해서는 거꾸로 출력해줘야 하기 때문에 뒤에서부터 출력해 줬다.
느낀점
고등학교 졸업 이후 수학을 꾸준히 하지 않아서 지수법칙도 가물가물했고, 수식을 가지고 놀아본 것도 오랜만이었다. 물론 해당 수식이 답을 구하는데 직접적인 영향을 주진 않았지만 다시 기억을 상기시킬 수 있어서 좋았고, 진법 변환 역시 오랜만에 해서 기억이 잘 안 났는데 기억을 되살릴 수 있어서 좋았다. 또한 확실히 인간이 수식을 구하는 방식과 코드로 구현하는 방식이 비슷하면서도 다른 점을 한번 더 느낄 수 있는 문제였던거 같다.
'알고리즘' 카테고리의 다른 글
백준 24262 - 파이썬 (0) | 2023.12.28 |
---|---|
백준 2869 - 파이썬 (0) | 2023.11.15 |
백준 2653 - 파이썬 (0) | 2023.09.29 |
백준 25206 - 파이썬 (0) | 2023.09.25 |
백준 1316 - 파이썬 (2) | 2023.09.25 |