1. Problem
2. My Solution
import sys
def solution(level):
if level >= n:
if check(arr,level) == True:
print(*arr)
exit()
else:
for i in range(21):
arr[level] = nums[i]
if check(arr,level+1) == False:
continue
solution(level+1)
def check(arr,n):
for i in range(n):
temp = 0
for j in range(i,n):
temp += arr[j]
if check2(temp,i,j) == False:
return False
return True
def check2(sum, i,j):
if sum > 0 and s[i][j] =='+':
return True
elif sum == 0 and s[i][j] == '0':
return True
elif sum < 0 and s[i][j] =='-':
return True
else:
return False
n = int(sys.stdin.readline())
matrix = sys.stdin.readline().rstrip()
s = [[0]*n for _ in range(n)]
cnt = 0
for i in range(n):
for j in range(i,n): # (n) 하면 s[1][0] 이 될 수도있음
s[i][j] = matrix[cnt]
cnt += 1 # 두 번째 입력으로 들어온 부호배열을 앞에서부터 하나씩 삽입
nums = [i for i in range(-10,11,1)]
arr = [0] * n
solution(0)
3. Others' Solutions
import sys
def check(n):
temp = 0
for i in range(n,-1,-1):
temp += arr[i]
if temp > 0 and s[i][n] =='+':
continue
elif temp == 0 and s[i][n] == '0':
continue
elif temp < 0 and s[i][n] =='-':
continue
else:
return False
return True
def solution(level):
if level >= n:
print(*arr)
exit()
else:
if s[level][level] == '0': # 결과의 level 번째 요소 자리가 0이면
arr[level] = 0
if check(level) == True:
solution(level+1)
elif s[level][level] == '+': # 결과의 level 번째 요소 자리가 양수이면
for i in range(1,11):
arr[level] = i
if check(level) == True:
solution(level+1)
else: # 결과의 level 번째 요소 자리가 음수이면
for i in range(-10,0):
arr[level] = i
if check(level) == True:
solution(level+1)
n = int(sys.stdin.readline())
matrix = list(sys.stdin.readline().rstrip())
s = [[0]*n for _ in range(n)]
k = 0
for i in range(n):
for j in range(i,n): # (n) 하면 s[1][0] 이 될 수도있음
s[i][j] = matrix[k] # 두 번째 입력으로 들어온 부호배열을 앞에서부터 하나씩 삽입
k += 1
arr = [0] * n
solution(0)
4. Learned