백준 :: 나3곱2 <16936번>

혜 콩·2022년 7월 28일
0

알고리즘

목록 보기
43/61

> 문제 <

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
profile
배우고 싶은게 많은 개발자📚

0개의 댓글