백준 16936 나3곱2

고장난 고양이·2022년 11월 9일
0

알고리즘_python

목록 보기
82/84
post-thumbnail

문제

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으로 많이 나눌 수 있는 수일 수록 왼쪽에 없을 수록 오른쪽에 두고 나머지는 오름차순하면 된다.

profile
개발새발X발일지

0개의 댓글