728x90
반응형
https://www.acmicpc.net/problem/21275
문제
폰 호석만은 진법 변환의 달인이다. 어떤 진법의 수가 주어져도 모든 다른 진법으로의 변환이 가능한 폰 호석만은 새로운 문제를 내기로 했다. 폰 호석만이 내는 문제는 다음과 같이 진행된다.
먼저 폰 호석만은 수 3개 X, A, B를 결정한다(0 ≤ X < 263, 2 ≤ A ≤ 36, 2 ≤ B ≤ 36, A ≠ B). 이 때 X는 10진법이다. 그 다음에 X를 A진법으로 표현한 수와 B진법으로 표현한 수를 종이에 써 놓는다.
그 다음에 종이에 써져 있는 두 개의 수를 여러분에게 보여주게 된다. 주어진 두 개의 수를 통해 원래 숫자인 X, A, B를 계산해주자. 만약 조건을 만족하는 (X, A, B)로 가능한 조합이 여러 개라면 "Multiple"을 출력하고, 가능한 조합이 없다면 "Impossible"를 출력한다.
입력
첫번째 줄에 X를 A진법으로 표현한 값과 X를 B진법으로 표현한 값이 공백으로 구분되어 주어진다. 각 자리수는 0 이상 z 이하이다. a부터 z 는 10부터 35 를 의미한다.
단, 0을 제외한 각 수는 0 으로 시작하지 않으며, 길이는 최대 70 이다.
출력
만약 문제의 조건에 맞는 X, A, B가 유일하게 존재한다면, X를 십진법으로 표현한 수와 A와 B를 공백으로 나누어 출력하라. 만약 만족하는 경우가 2가지 이상이라면 "Multiple"을, 없다면 "Impossible"을 출력하라.
풀이
Code
import sys
input = sys.stdin.readline
def solution(a, b):
# 1. 출력 리스트 생성
answer = []
# 2.
for A in range(2, 37) :
# 2-1.
try :
# A 구하기
AX = int(a, A)
# 2-2.
except : continue
# 2-3. X가 2^63 이상일 경우 continue
if AX >= 2** 63 : continue
# 2-4.
for B in range(2, 37) :
# 2-4-1. A와 B가 같을 경우 continue
if A == B : continue
# 2-4-2.
try :
# B 구하기
BX = int(b, B)
# 2-4-3.
except : continue
# 2-4-4. X가 같을 경우 출력 리스트에 값 삽입
if AX == BX :
answer.append((AX, A, B))
# 3. 결과 출력
if not answer : print("Impossible")
elif len(answer) > 1 : print("Multiple")
else : print(*answer[0])
if __name__ == "__main__" :
a, b = map(str, input().rstrip().split())
solution(a, b)
728x90
반응형
'Coding Test > Baekjoon' 카테고리의 다른 글
[Python/BOJ] 8901. 화학 제품 (0) | 2023.12.18 |
---|---|
[Python/BOJ] 10830. 행렬 제곱 (0) | 2023.12.13 |
[Python/BOJ] 2307. 도로검문 (1) | 2023.12.05 |
[Python/BOJ] 2533. 사회망 서비스(SNS) (0) | 2023.12.04 |
[Python/BOJ] 15683. 감시 (0) | 2023.12.01 |