백준 2745 (진법 변환) - Python

김종언·2024년 1월 14일
0

백준

목록 보기
6/18

문제

간단한 진법 변환 문제다. 사실 안 간단하다. 왜냐면 내가 좀 무식해서 진법 개념을 잘 몰랐기 때문이다. 사실 잘 모르기보다 뭔지 알긴 하는데 맨날 생각할 때마다 머리가 꼬여서 생각하기 싫어했다. 그래서 이 기회에 좀 확실히 공부했다.

풀이.

자릿수에 따라 진법 계산만 하면 되기에 별다른 문제는 없었다 싶었다만..

N, B = input().split()
length = len(N)
total = 0
list_alpha = [chr(i) for i in range(65, 91)]
list_num = [i for i in range(10, 36)]


for i in range(length):
    if N[i] in list_alpha:
        total += list_num[list_alpha.index(N[i])] * (int(B)**(length-1))
        length -= 1
    else:
        total += int(N)[i] * (int(B)**(length-1))
        length -= 1

print(total)

자신있게 첫번째 코드를 써서 냈는데, 메모리 초과로 틀렸다!

아무래도 알파벳과 그에따른 숫자를 각 list에 저장하고 매번 반복문마다 길이가 긴 list에서 index를 찾는 방식이 메모리사용을 과하게 한 것 같다. 그래서 코드를 수정했다.

N, B = input().split()
length = len(N)
total = 0
text = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

for i in range(length):
    total += text.index(N[i]) * (int(B)**(length-1))
    length -= 1

print(total)

알파벳은 우리가 실사용하는 숫자 10, 11, 12 ... 35를 나타낸 것이니 text라는 한 변수에 담아뒀다.

for i in range(length):
    total += text.index(N[i]) * (int(B)**(length-1))
    length -= 1

진법 변환 방식대로, 각 계수 x 자릿수^(진법수-1)를 전부 더해 total에 담았다.

코멘트.

진법 공부를 오랜만에 할 수 있어서 좋았다. 기초지식이 참 중요하다.. 무식한 내 자신을 반성한다. 그래도 잘 구현해냈으니 오케입니다. 다음.

profile
나는 김종언이다.

0개의 댓글