[jungol] 3106 : 진법 변환 - python code

위대하신 님·2023년 1월 26일
0

문제

A진법 수 S를 입력 받아 B진법 수로 출력하는 프로그램을 작성하시오.
S에 사용되는 값은 0 ~ 9, A ~ Z이다.
(2 ≤ A, B ≤​ 36) ( 0≤​ S를 10진수로 바꾼수 ≤​ 263-1 )

입력형식
입력은 100개 이하의 테스트 케이스가 행으로 구분하여 주어진다.
테스트 케이스의 끝에는 0이 주어진다.
각 테스트 케이스에는 세 수 A, S, B가 공백으로 구분되어 주어진다.

출력형식
각 테스트 케이스에 대하여 A진법수 S을 B진법 수로 변환한 결과를 행으로 구분하여 출력한다.

<초기 코드>

def baseConversion(S,A,B):
    A,B = int(A), int(B)
    decimal_val = 0
    power = 0
    for i in range(len(S)-1,-1,-1):
        if S[i].isalpha():
            decimal_val += (ord(S[i]) - ord('A') + 10)*A**power
        else:
            decimal_val += int(S[i])*A**power
        power += 1
    
    td = ''
    
    if decimal_val == 0:
        return ''
    while decimal_val > 0:
        n = decimal_val%B
        if n>9:
            n = chr(ord('A')+n-10)
        td = str(n)+td
        decimal_val//=B
    return td
    

while True:
    try:
        A,S,B = input().split()
        print(baseConversion(S,A,B))
    except:
        break    

그런데 여기서 마음에 들지 않는 부분이 있다.
입력을 받는 while문이다.
입력형태를 보면 계속 3개의 문자가 들어오다가 0이라는 문자가 들어오면 멈춰야한다.
계속 3개를 받다가 1개를 받는다니, 이건 쉽지 않은 일이었다.
그러나 그건 상당히 간단한(?) 방법으로 해결되었다.
나는 처음부터 문자 3개를 각각 따로 받고 그게 아닌 경우 예외 처리를 이용하여 0만 받았지만
처음부터 하나로 받으면 쉽게 해결될 일이었다.
while문을 다음과 같이 바꾸면 된다.

while True:
    user_input = input("Enter a number: ")
    if user_input == '0':
        break
    a, s, b = map(int, user_input.split())

이로써 조금 더 마음이 편하게 코드를 작성할 수 있었다.

성공~ :)

0개의 댓글