42 lines
1.1 KiB
Python
42 lines
1.1 KiB
Python
# 0 만들기
|
|
|
|
import sys
|
|
from collections import deque
|
|
|
|
input = sys.stdin.readline
|
|
|
|
|
|
OPERATOR = [" ", "+", "-"] # 아스키 순서
|
|
|
|
def dfs(depth, n, exp):
|
|
if depth == n:
|
|
exp += str(depth)
|
|
if eval(exp.replace(" ", "")) == 0:
|
|
print(exp)
|
|
return
|
|
|
|
for op in OPERATOR:
|
|
dfs(depth+1, n, exp+str(depth)+op)
|
|
|
|
def solution():
|
|
t = int(input().rstrip())
|
|
|
|
for _ in range(t):
|
|
n = int(input().rstrip())
|
|
dfs(1, n, "")
|
|
print()
|
|
return
|
|
|
|
|
|
solution()
|
|
|
|
"""
|
|
걸린 시간: 몰라
|
|
|
|
시간 복잡도: 전체 탐색이고, 연산자가 8칸에 3가지씩 가능하기 때문에 3^8이고, 테스트 케이스가 최대 9개이므로 (3^8)*9.
|
|
따라서 3^10이다. 60000정도이다.
|
|
|
|
해설: 전체를 다 해봐야지 알 수 있다는 것을 파악한 후 모든 경우의 수를 어떻게 확인할지가 관건이었다.
|
|
중첩 for문을 하려고 했으나 중첩이 너무 많아져서 dfs로 완전 탐색을 하기로 했다.
|
|
문자열 수식을 계산하는 것을 eval()을 몰라서 split하고 어떻게 해서 계산하려고 했는데 그냥 eval() 썼다.
|
|
""" |