[BOJ] 14888 연산자 끼워넣기_DFS
Date:
연산자 끼워넣기
내 풀이
- 방식 : BFS
- BFS 방식으로 풀어 전체 경우의 연산값을 가지고 있어야함
📰code
from collections import deque
def cal(op,a,b):
if op == 0: return a+b
elif op == 1: return a-b
elif op == 2: return a*b
else :
if b != 0:
if a<0: return -(-a//b)
else : return a//b
else : return
from collections import deque
c = int(input())
num = list(map(int,input().split()))
p,m,mul,div = list(map(int,input().split()))
s = num[0]
n = 1
q = deque()
q.append((n,s,p,m,mul,div))
max_sum = -1e9
min_sum = 1e9
while q:
n,s,p,m,mul,div = q.popleft()
if n == c:
if max_sum<s: max_sum = s
if min_sum>s: min_sum = s
else :
oper = [p,m,mul,div]
for i in range(4):
if oper[i] != 0:
if i ==4 and num[n] == 0: continue
oper[i]-=1
q.append((n+1,cal(i,s,num[n]),oper[0],oper[1],oper[2],oper[3]))
oper[i]+=1
print(max_sum)
print(min_sum)
다른 풀이
- 방식 : DFS
- 최소값만 저장하면 되기 때문에 공간 효율성이 높아짐
📰code
N = int(input())
A_list = [int(x) for x in list(input().split())]
op = [int(x) for x in list(input().split())]
result = []
def operation(ex_val, idx, hap, sub, mul, div):
# 계산이 끝났다면, max와 min 값과 비교
if idx == N:
result.append(ex_val)
return
if hap > 0:
val = ex_val + A_list[idx]
operation(val, idx+1, hap-1, sub, mul, div)
if sub > 0:
val = ex_val - A_list[idx]
operation(val, idx+1, hap, sub-1, mul, div)
if mul > 0:
val = ex_val * A_list[idx]
operation(val, idx+1, hap, sub, mul-1, div)
if div > 0:
val = int(ex_val/A_list[idx])
operation(val, idx+1, hap, sub, mul, div-1)
operation(A_list[0], 1, op[0], op[1], op[2], op[3])
print(max(result))
print(min(result))
💡 수정 필요한 내용은 댓글이나 메일로 알려주시면 감사하겠습니다!💡
댓글