소소한 컴퓨터 이야기

진법 변환

by Cori

문제

B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 사용한다.

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

 

· 입출력 예

num bin return
ZZZZZ 36 60466175

풀이

1. Me

def get_num(num: str) -> int:
    if num.isnumeric():
        return int(num)
    elif 'A' <= num and num <= 'Z':
        return (ord(num) - 55) 

def solution(num: str, b: str) -> int:
    sum = 0
    for i, d in enumerate(num): 
        val = get_num(d)
        sum += val * (int(b) ** (len(num) - i - 1))
    print(sum)

num, b = input().split()
solution(num, b)

10진수가 넘어가는 경우에는 문자열로 수를 표현하기 때문에, ord() 연산을 이용해서 'A' ~ 'Z'까지의 문자를 ASCII 코드로 바꾸고, 'A': 65 -> 10으로 표현하기 위해 55를 빼주었다. 이후 진법 계산법에 따라 값을 계산하면 완료 !

 

* elif 조건문으로 num이 'A' ~ 'Z' 사이에 있는지 검사하지 않으면 문제 통과를 못함

'CS > Coding Test' 카테고리의 다른 글

DFS와 BFS  (0) 2021.09.27
유효한 팰린드롬  (0) 2021.09.27
팩토리얼 진법  (0) 2021.09.25
이상한 문자 만들기  (0) 2021.09.09
제일 작은 수 제거하기  (0) 2021.09.08

블로그의 정보

코딩하는 오리

Cori

활동하기