📖 문제 링크
https://www.acmicpc.net/problem/11005
11005번: 진법 변환 2
10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
👩💻 문제풀이
맞긴 맞았는데, 속도가 느려서(140ms가 나옴) 다시 풀어본 문제이다.
비슷한 풀이라고 생각했는데, 다른 풀이와 속도가 2배 정도 차이가 난다.
처음 코드는 알파벳 대문자를 리스트로 먼저 만든 후 진행했다. (ascii_uppercase 사용)
다른 분들의 풀이를 보니 리스트로 만들지 않고, 나머지를 구함과 동시에 아스키코드로 계산해 바로 배열에 넣어주었다.
이렇게 진행했더니 바로 72ms라는 속도로 줄어들었다.
원인은 사실 잘 모르겠다.
배열을 탐색하는 과정에서 속도가 느려지는 건지, 아니면 ascii_upper케이스의 자체 속도가 있는 건지 아직 발견하지 못했다.
다음에 비슷한 문제를 풀땐 아스키코드를 직접 계산하는 방식을 주로 써봐야겠다.
✅ 최종 코드
#<속도가 느린 코드>
from string import ascii_uppercase
alphabet = list(ascii_uppercase)
N, B = map(int, input().split())
arr=[]
while N!=0:
if N%B >= 10:
arr.append(alphabet[(N%B)-10])
else:
arr.append(N%B)
N = N//B
for i in reversed(arr):
print(i, end='')
# <속도 향상을 위해 다시 푼 문제>
N, B = map(int, input().split())
arr=[]
while N!=0:
if N%B >= 10:
arr.append(chr(65 + (N%B) - 10))
else:
arr.append(N%B)
N = N//B
for i in reversed(arr):
print(i, end='')
'알고리즘 > Python' 카테고리의 다른 글
[백준/Python] 1373번: 2진수 8진수 (파이썬 진법 변환 요약) (0) | 2022.02.08 |
---|---|
[백준/Python] 2745번: 진법 변환 (0) | 2022.02.08 |
[백준/python] 9613번: GCD 합 (0) | 2022.02.08 |
[백준/Python] 1158번: 요세푸스 문제 (0) | 2022.01.31 |
[백준/Python] 1406번: 에디터 (0) | 2022.01.31 |