반응형
https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
내가 한 풀이
n=int(input())
nums=list(map(int,input().split(" ")))
operator=list(map(int,input().split(" ")))
maximum= -1e9
minimum=1e9
def dfs(depth,total,add,sub,mul,div):
global maximum, minimum
if depth==n:
maximum=max(total,maximum)
minimum=min(total,minimum)
return
else:
if add:
dfs(depth+1,total+nums[depth],add-1,sub,mul,div)
if sub:
dfs(depth+1,total-nums[depth],add,sub-1,mul,div)
if mul:
dfs(depth+1,total*nums[depth],add,sub,mul-1,div)
if div:
dfs(depth+1,int(total/nums[depth]),add,sub,mul,div-1)
dfs(1,nums[0],operator[0],operator[1],operator[2],operator[3])
print(maximum)
print(minimum)
최대값, 최솟값을 모두 구해야 했기 때문에 모든 경우의 수를 다 구해야 했다.
재귀 함수(dfs)를 이용해 모든 경우의 수를 탐색 하되, 종료 조건을 앞에 넣어주었다.
'코테 공부' 카테고리의 다른 글
백준[2588] 곱셈 (파이썬 풀이) (0) | 2021.10.06 |
---|---|
백준[2504] 괄호의 값 (파이썬 풀이) (0) | 2021.10.06 |
백준[1874] 스택 수열 (파이썬 풀이) (0) | 2021.10.04 |
백준[1181] 단어정렬 (파이썬 풀이) (0) | 2021.10.03 |
백준[1181] 단어정렬 (파이썬 풀이) (0) | 2021.10.01 |