문제 바로가기
접근 방법
- 재배열한다고 숫자를 바꿔가는 방법을 생각하면 안 된다. 언제나 그렇듯 규칙을 찾는다.
- 규칙이라 말하기도 애매하지만, 원래의 자릿수보다 자릿수가 늘어나면 비교자체가 불가능하다.
예로 1035
가 있는데 10350
이 되면 1035
를 아무리 재배열 해봐도 10350
을 만들 수 없다.
- 때문에 원래의 자릿수보다 커지기 전까지만 곱셈을 해야 한다.
1035
에 3
을 곱한 3105
가 그 답이 될텐데 이 둘은 위치는 다르지만 모든 값이 서로에게 포함되어 있다.
- 정렬을 이용하면
0135
로 둘은 동일한 걸 알 수있다.
풀이
T = int(input())
for i in range(1, T+1):
num_str = input()
num_list = sorted(list(num_str))
flag = False
k = 2
while True:
multi_num = int(num_str) * k
if len(str(multi_num)) > len(num_str):
break
if sorted(list(str(multi_num))) == num_list:
flag = True
break
k += 1
if flag:
answer = "possible"
else:
answer = "impossible"
print(f"#{i} {answer}")