[BOJ] 11005 | 진법 변환 2

Gaanii·2024년 10월 12일
0

Problem Solving

목록 보기
24/210
post-thumbnail

아래 백준 로고를 클릭하면 해당 문제로 이동합니다 😀

BOJ 로고



풀이과정


이전 게시글 예시와 비슷하게 만약 입력으로 17325410 36이 들어왔다고 가정해보자.
진법 변환은 다음과 같이 할 수 있다.

N나머지
1732541048126114
4812611336813
1336837112
3711011

위 표에서 몫이 B보다 작은 경우부터 나머지를 거꾸로 읽어주면 10, 11, 12, 13, 14가 된다.
따라서 ABCDE를 찾아낼 수 있다.


코드는 우선 0~Z까지 있는 문자열을 만들었다.
이 문자열의 인덱스를 이용하면 A를 10으로, Z를 35로 바꿔줄 수 있다.


후에 while문을 통해 입력받은 N을 B로 계속 나누고, 그때의 나머지값을 저장한다.
이때 주의해야할 점은 나머지가 위에서부터 들어간다는 점이다 !

while문 조건은 True를 사용했고 대신에 안에 if문을 이용해 몫이 b보다 작아졌으면 그때의 몫을 결과값에 추가하게 했다. 위에 표 예시로는 10이 마지막에 추가가 된것이다.


그리고 나머지는 아래서부터 읽어야하기 때문에 결과 리스트를 reverse()를 이용해 뒤집어줬다.

코드


num = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'

n, b = map(int, input().split())

result = []
while True:
    if n < b:
        result.append(n)
        break
    result.append(n % b)
    n //= b

result.reverse()
for i in result:
    print(num[i], end = '')


결과


정답

0개의 댓글