✏ 풀이
import re, sys
input = sys.stdin.readline
regex = re.compile('^[A-F]{0,1}A+F+C+[A-F]{0,1}$')
t = int(input())
for i in range(t):
str = input().rstrip()
if regex.match(str) != None:
print("Infected!")
else:
print("Good")
✏ 풀이
**def transform(x, n):
result = 0
for i in range(len(x)):
if ord(x[i]) >= ord('a'):
result += (ord(x[i]) - ord('a') + 10) * n**(len(x) - 1 - i)
else:
result += int(x[i])*n**(len(x) - 1 - i)
return result
Xa, Xb = input().split()
alph = '0123456789abcdefghijklmnopqrstuvwxyz'
count = 0
X, A, B = -1, 0, 0
max_Xa, max_Xb = 2, 2
for i in range(len(Xa)):
max_Xa = max(max_Xa, alph.find(Xa[i])+1)
# 10(a)진법이면 0~9까지 쓰니까
# 예를들어 p가 최대값이면, (p+1)진법부터 가능성 있음
for i in range(len(Xb)):
max_Xb = max(max_Xb, alph.find(Xb[i])+1)
for a in range(max_Xa, 37):
for b in range(max_Xb, 37):
temp_Xa = transform(Xa, a)
if a == b or temp_Xa >= 2**63: # 주의: 문제 제한 조건으로 A != B, 0 <= X < 2**63 이 있음
break
if temp_Xa == transform(Xb, b):
A, B = a, b
X = temp_Xa
count += 1
if count > 1 or X == 0:
print("Multiple")
elif count == 1:
print(X, " ", A, " ", B)
else:
print("Impossible")**
이중 for문 돌 때 처음에는 범위를 2부터(2진법부터)로 설정해주었는데, 예제 입력으로 입력해보면 틀린 출력이 나왔다.
2진법부터 for문을 돌리는 안되는 이유는, 입력에 해당 진법으로 표현할 수 없는 문자가 있으면 안되기 때문이다!
→ 각 입력 문자열에서 가장 큰 문자를 찾아, 2진법부터가 아니라 (최대 문자+1)진법부터 변환해주어야 한다!
예제 입력 2는 왜 Impossible인가?
→ 제한 조건을 잘 확인하기! 제한 조건에 A ≠ B가 있다.