https://www.acmicpc.net/problem/16936
나3곱2 연산을 이용해 수열 A를 구해야한다. 주어지는 수열 B는 수열 A를 섞어놓은 것
= 정수 x를 나3곱2 연산한 값이 B의 원소 중 하나여야 한다연산 값은 무조건 B의 [최솟값, 최댓값] 사이이자 B의 원소 중 하나고,
A에 처음 들어가는 값이어야 한다. (중복x)dfs 를 이용해 x가 3의 배수면, <나3 or 곱2> 연산 가능
--> 나3 연산 값 위 조건에 모두 부합하는지check
함수 호출
--> 부합하지 않다면, 곱2 연산 값check
함수 호출3의 배수가 아니라면, <곱2> 연산만 가능
n = int(input())
B = list(map(int, input().split()))
minB = min(B)
maxB = max(B)
def check(nx):
if minB <= nx <= maxB and (nx in B) and (nx not in A):
A.append(nx)
return 1
return 0
def dfs(x):
if x % 3 == 0:
if check(x // 3):
return dfs(x // 3)
if check(x * 2):
return dfs(x * 2)
else:
if check(x * 2):
return dfs(x * 2)
for x in B:
A = [x]
dfs(x)
if len(B) == len(A):
print(*A, end=' ')
break