문제링크 : https://www.acmicpc.net/problem/11576
11576번: Base Conversion
타임머신을 개발하는 정이는 오랜 노력 끝에 타임머신을 개발하는데 성공하였다. 미래가 궁금한 정이는 자신이 개발한 타임머신을 이용하여 500년 후의 세계로 여행을 떠나게 되었다. 500년 후의
www.acmicpc.net
풀이과정 :
먼저 A 진법의 수를 각 자리마다 * pow(A, 지수)를 곱한뒤 total에 합산하여
10진법의 수로 변환해주었다.
그 후, 10진법 수를 기준으로 B진법으로 몇자리 수인지부터 while 문을 통해 구하고,
10진법을 pow(B, 지수)로 큰 수부터 차례로 분해하여 리스트에 차수를 저장해주었다.
import math
A, B = map(int, input().split())
A_num_count = int(input()) #A의 자릿수
B_num_count = 0 #B의 자릿수
A_nums = list(map(int, input().split())) #각 자리수의 차수를 저장하는 리스트
B_nums = [] #각 자리수의 차수를 저장하는 리스트
total = 0 #10진법으로 나타낸 수
for i in range(A_num_count): #A를 10진법으로 전환
total += int(A_nums[i] * math.pow(A, (A_num_count-1)-i))
while total > math.pow(B,B_num_count):
B_num_count += 1
for i in range(B_num_count-1, -1, -1): #10진법 수를 다시 B진법으로 전환
if i == 0:
B_nums.append(total)
break
temp = int(total//math.pow(B, i))
B_nums.append(temp)
total -= int(math.pow(B, i) * temp)
print(*B_nums)
후기 : 진법 변환을 코드로 직접 짜본건 처음인데, 엄청 간단할줄 알았는데, 의외로 생각해주어야
할것이 있었다.
'Coding > 백준' 카테고리의 다른 글
[백준] 2193 - 이친수 - (python 파이썬) (0) | 2022.02.26 |
---|---|
[백준] 1697 - 숨바꼭질(BFS) - (python 파이썬) (0) | 2022.02.17 |
[백준] 2156 - 포도주 시식(Dynamic programming) - (python 파이썬) (0) | 2022.02.11 |
[백준] 11052 - 카드 구매하기 - (python 파이썬) (0) | 2022.02.11 |
[백준] 11727 - 2*n 타일링 2 (동적프로그래밍) - (python 파이썬) (0) | 2022.02.07 |