알고리즘

백준 7490 파이썬

구슬탈출 2023. 8. 16. 22:54

유형은 백트래킹 

 

T = int(input())
arr = ["+","-"," "]

def fun(N,_list):
    _list = list(_list)
    _sum = [1]
    cnt = 2
    for i in range(1,N):
        if _list[i-1] == " ":
            v = _sum.pop()
            if v > 0:
                _sum.append(v * 10 + cnt)
            else :
                _sum.append((abs(v * 10) +cnt) * -1)

        elif _list[i-1] == "-":
            _sum.append(-1* cnt)
        else: 
            _sum.append(cnt)
        cnt+= 1

    return sum(_sum)

def dfs(c,v,prv,N):
    if c == N - 1:

        if fun(N,v) == 0:
            ans = []
            for i in range(1,N+1):
                ans.append(str(i))
                if i != N:
                    ans.append(v[i-1])
            result.append(ans)
        return

    for i in range(prv,N-1):
        for j in arr:
            t = v+ j
            dfs(c+1,t,i+1,N)

for i in range(T):
    N = int(input())
    result = []
    dfs(0,"",0,N)
    result.sort()
    for i in range(len(result)):
        print("".join(result[i]))
    print()