IT/코딩
(파이썬) 백준 11576번 Base Conversion 파이썬 풀이
new1life
2022. 8. 13. 14:07
예제 입력1로 문제를 이해하면, 17진법을 사용하고 있는 미래, 정이는 8진법을 사용하고 있다. (첫 줄 입력)
17진법을 2자리수로 나타낼 것이다. (둘째 줄 입력) => 17진법은 0에서 16까지 숫자가 올 수 있는데,
10이상인 숫자를 떼어 주어야 자릿 수를 알 수 있다. 1 16과 11 6이 116과 혼동되지 않도록
17진법으로 표현한 2 16(2자리수)를 8진법으로 출력하라 6 2(2자리수) (셋째 줄 입력)
1. 미래에 사용하는 진법을 a에 정이가 사용하고 있는 진법을 b에 입력
a,b = map(int,input().split())
2. a진법으로 보여진 수의 자릿수를 c에 입력
c = int(input())
3. a진법으로 얻은 수를 리스트로 입력! (9보다 큰 수의 자릿수를 유지하기 위해)
l = list(map(int,input().split()))
4. a진법을 b진법으로 바꾸기 위해서는 10진수로 우선 바꾸어 주어야 한다.
#10진법으로 바꾸기
반대부터 시작하여 ans변수에 다 더해준다. (2진법->10진법 바꾸는 법을 생각하면 된다)
l = l[::-1]
ans = 0
for i in range(c):
ans+=l[i]*a**i
5. b진법으로 다시 바꾸려고 하는데, 문자열로 하면 위에 언급한 116이 11 6인지 6 11인지 알 수 없게 된다.
따라서, 리스트로 담아준다.
#이제 b진법으로 바꾸기
k=[]
k리스트에 나머지를 담아주고, 몫은 b로 계속 나눠준다. (0이되기 전까지)
while ans!=0:
k.append(ans%b)
ans//=b
역시나 역수로 받아주어야 한다.
k = k[::-1]
리스트 안의 값을 공백 하나로 차례로 출력한다.
print(' '.join(map(str,k)))