반응형
백준 11005번은 '주어진 10진법 수 N을 사용자가 지정한 진법 B로 변환하는 알고리즘'을 만드는 문제입니다.
원리만 이해하면 생각보다 간단하게 풀 수 있습니다.
간단한 예시를 통해 이해하고 답을 보겠습니다.
예시
10진수 10을 2진수로 변환하는 경우: N = 10, B = 2
10진수 -> B진법 변환은 나머지를 기록해둘 필요가 있습니다.
또한 10진수 값 N 을 B로 나눴을 때 몫을 기억해둘 필요가 있습니다. 지속적으로 업데이트 해주어야 합니다.
- 10 % 2 = 0 --> 나머지 = "0"
- N // B : 10 // 2 = 5 --> 몫 = "5"
- N = 5 (i.e. N = N // B)
- 5 % 2 = 1 --> 나머지 = "1"
- N // B: 5 // 2 = 2 --> 몫 = "2"
- 2 % 2 = 0 --> 나머지 = "0"
- 동일하게 마지막 N은 1이 되고, 나머지는 1이 됩니다 --> 나머지 = "1"
모든 나머지를 붙여서 이어봅시다.
위에서 부터 붙여본다면 "0101" 이 되는 것을 알 수 있는데, 역순으로 바꿔주어야 합니다.
변환 과정에서 구한 자리수들은 역순으로 붙어졌기 때문입니다.
즉 다음과 같은 코드로 정답을 도출할 수 있습니다.
if __name__ == '__main__':
N, B = map(int, input().split())
# string.index() gives the index location -> Z: 35 as required
number = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
s = '' # initialize empty string for answer notation
while N:
s += number[N % B]
N //= B
print(s[::-1])
반응형
'알고리즘' 카테고리의 다른 글
[python] 등차수열과 등차수열의 합 (0) | 2024.03.24 |
---|---|
[백준 9506] 약수 합 - 파이썬 (0) | 2024.03.18 |
[백준 2563번] 색종이 - 파이썬 (1) | 2024.03.17 |
[백준 10798번] 세로 읽기 파이썬 (0) | 2024.03.17 |
python 리스트 요소 한 줄로 한번에 출력 print(*arr) (0) | 2024.03.16 |