[백준_Python] 1316번: 진법 전환

Jason·2023년 8월 2일
post-thumbnail

1. 문제

2. 해석

처음 문제를 보자마자 들었던 생각은 딱 두가지였다.
분명 진법 변환하는 함수가 있어 이걸 활용하면 짧게 풀어질 것,
혹은 직접 진법을 변환하는 함수를 만들 것.

우선은 10진법으로 변환하는 int(n진법수, n) 함수를 활용해서 풀고
그 뒤에 직접 10진법을 변환하는 함수를 만들어 주었다.

3. 풀이

1) 나의 풀이

def base_n(a, b):
    return int(a,b)

n, base = input().split()
print(base_n(n, int(base)))

앞에서 말한 바와 같이 내장된 10진법 변환 함수를 활용했다.

def base_n(a, b):
    input_list = list(a)
    sum_list = []
    for i in range(len(input_list)):
        # 리스트 안에 있는 문자가 알파벳인지, 숫자인지 확인
        if input_list[i].isalpha():     
            # 문자를 아스키 코드 값으로 변환
            digit = ord(input_list[i]) - 55
            sum_list.append(digit*int(b)**(len(input_list)-i-1))
        else:
        	# 숫자를 그대로 사용
            sum_list.append(int(input_list[i])*int(b)**(len(input_list)-i-1))
    return sum(sum_list), sum_list
n, base = input().split()

print(base_n(n, int(base))) 

2) 다른 풀이

N, B = input().split()
N = ''.join(reversed(N))
B = int(B)

number = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
result = 0

for i in range(len(N)-1, -1, -1):
	sum = number.index(N[i]) * (B**i)
    result += sum
    
print(result)

4. 배운점

고민을 해 보고 싶으면 우선 가볍게 생각하고 그 뒤에 깊게 생각하자.

reversed()는 reversed 객체를 반환한다.
때문에 리스트, 튜플, 문자열화 하기 위해서는 다른 작업이 필요하다.
위 다른 사람 풀이에서는 문자열로 만들기 위해서 구분자 ''로 연결해주었다.

range(시작, 간격, 마지막)를 통해 반복문을 역으로 사용할 수 있다.

profile
개발과 데이터에 관심이 많은 서버 개발자

0개의 댓글