https://www.acmicpc.net/problem/16936
n=int(input())
l=list(map(int,input().split()))
a=[]
for i in range(n):
cnt=0
num=l[i]
while True:
if num%3==0:
cnt+=1
num=num//3
else:
break
a.append([cnt,l[i]])
a.sort(key=lambda x:(-x[0],x[1]))
for j in a:
print(j[1],end=' ')
브루투포스 + 수학문제
처음엔 bfs를이용해서 각 경우의 수들을 통해서 리스트값이 같은 경우로 뽑아낼려고 했으나 잘되지않았다.
나3곱2는 2와 3의 소인수인 점을 이용해서 찾아갈 수 있다.
오른쪽으로 갈수록 3으로 나누어지기에 3을 3의 배수는 적어지고 2의 배수는 늘어난다.
그원리를 이용해서 3으로 많이 나눌 수 있는 수일 수록 왼쪽에 없을 수록 오른쪽에 두고 나머지는 오름차순하면 된다.