백준 2745번 문제
진법 변환
문제

풀이
1.
우선 이 문제를 풀기위해서는 n진법에 대한 이해가 있어야 할 것 같다.
이는 추가로 글을 써보겠다.
아무튼 10진법을 결국은 n진법으로 변경을 하는 방식을 사용한다.
여기서 문제는 알파벳 인풋을 n진법으로의 변환인데 이는 생각을 해 봄직 하다.
왜냐면 진법은 최대 36진법 즉 0-9와 A-Z까지 를 이야기 한다.
즉 36진법이 아니면 Z를 표현할 수 없다는 의미다.
예시의 ZZZZZ는 3535353535이며 이를 변환하려면 각각 35를 변환한다.
즉 제일 우측 부터 35는 36진법의 1이니 35*1
2번째는 1의 자리 즉 36^1 의자리또한 1이다. 이는 35*36
이렇게 5번째 35까지 더하는 것이다.
이는 35 x (36^0) + ... 35 x (36^4) 를 하여 60,466,175가 나온 것이다.
우선은 최대치가 정해져 있다보니, 인풋을 주어진 진법으로 변환만 하면 된다.
우선 인풋을 2개로 받는다. 우선은 N과 B로 저장한다.
그 후, 진법 변환을 위하여 0-Z까지를 매개변수에 저장을 한다. 이러면 36진법의 Z는 35 즉 area 를 0-Z로 한다면
Z를 find할때 35가 나오게 될 것이다. 이를 이용해서 숫자를 찾을 수 있다.
그리고 result와 N의 길이를 초기화한다.
반복문을 사용하여 N의 길이만큼 반복을 시키고,
맨 우측부터 계산을 해야하기 때문에, N에서 시작할때 N[length-1-i]로 반복해야한다.
그 후, result에 N의 area변환 숫자 와 (B의 i 제곱)을 += 시킨다.
>>
area에서 서칭 방법은 index와 find가 존재했다.
find는 area에 원하는게 없으면 -1을 반환하지만, index는 없으면 에러가 뜬다.
사실 최대값이 지정되어있으니 문제가 될건 없지만, 오류를 방지하기위해 find보다는 index인 것 같다.
결과
import sys
N, B = sys.stdin.readline().strip().split()
B = int(B)
result = 0
length = len(N)
area = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for i in range(length):
NN = N[length - 1 - i]
convert = area.index(NN)
result += convert * (B ** i)
print(result)
나중에 문제를 푸는것을 확인해보니, 그냥 파이썬 내장을 써도 되는 문제였다.
import sys
N, B = sys.stdin.readliner().strip().split()
print(int(N, int(B))
int(A,B)를 넣게 되면, A의 값을 B진법으로 변환해준다는 것이다.
역시... 내장 기능을 잘 알아야겠다 ㅎㅎ...
Coding_Test/백준/Bronze/2745. 진법 변환 at main · K-MarkLee/Coding_Test · GitHub
Coding_Test/백준/Bronze/2745. 진법 변환 at main · K-MarkLee/Coding_Test
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - K-MarkLee/Coding_Test
github.com
'코딩테스트 > BaekJoon' 카테고리의 다른 글
| 백준 파이썬 코딩테스트 (세탁소 사장 동혁) (1) | 2025.08.18 |
|---|---|
| 백준 파이썬 코딩테스트 (진법 변환 2) (1) | 2025.08.15 |
| 백준 파이썬 코딩테스트 (색종이) (8) | 2025.08.11 |
| 백준 파이썬 코딩테스트 (세로읽기) (4) | 2025.08.09 |
| 백준 파이썬 코딩테스트 (최댓값) (1) | 2025.08.08 |