본문 바로가기

Programming/Python

[Baekjoon/Python] 11005 진법 변환 2

문제

10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오.

10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

A: 10, B: 11, ..., F: 15, ..., Y: 34, Z: 35

 

 

입력

첫째 줄에 N과 B가 주어진다. (2 ≤ B ≤ 36) N은 10억보다 작거나 같은 자연수이다.

 
 

출력

첫째 줄에 10진법 수 N을 B진법으로 출력한다.

 

 

내 제출

1. 

import sys
N, B = map(int, sys.stdin.readline().split())

dic = {10: "A", 11: "B", 12: "C", 13: "D", 14: "E", 15: "F", 16: "G", 17: "H", 18: "I", 19: "J", 20: "K", 21: "L", 22: "M", 23: "N", 24: "O", 25: "P", 26: "Q", 27: "R", 28: "S", 29: "T", 30: "U", 31: "V", 32: "W", 33: "X", 34: "Y", 35: "Z"}


result = ''

while N:
    result += str(dic[N % B])
    N //= B

print(result[::-1])

 

2. 

import sys
N, B = map(int, sys.stdin.readline().split())

result = ''

while N:
    if(N % B > 9):
        result += str(chr((N % B) + 55))
        N //= B
    else:
        result += str(N % B)
        N //= B

print(result[::-1])

 

 

다른 코드

N, B = map(int, input().split())
s = ''
arr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

while N:
    s += str(arr[N%B])
    N //= B

print(s[::-1])
n, b = map(int, input().split())
s=""
while n:
	s += chr(n%b + [48,55][n%b >9])
    n //= b
print(s)
  • chr(n % b + [48, 55][n % b > 9])
    • n % b > 9가 참이면 True로 평가되어 1을 반환, 그렇지 않으면 False로 0을 반환
    • n % b + 48은 0부터 9까지의 숫자를 ASCII 문자 '0'부터 '9'로 변환
    • n % b + 55는 10부터 35까지의 숫자를 ASCII 문자 'A'부터 'Z'로 변환