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()))
add, sub, mul, div = map(int, input().split())
# 비교값
max_ = -1e9
min_ = 1e9
def dfs(cnt, res, add, sub, mul, div):
global max_, min_
# 재귀 탈출 조건
if cnt == N:
max_ = max(res, max_)
min_ = min(res, min_)
return
if add:
dfs(cnt+1, res+nums[cnt], add-1, sub, mul, div)
if sub:
dfs(cnt+1, res-nums[cnt], add, sub-1, mul, div)
if mul:
dfs(cnt+1, res*nums[cnt], add, sub, mul-1, div)
if div:
dfs(cnt+1, int(res/nums[cnt]), add, sub, mul, div-1)
dfs(1, nums[0], add, sub, mul, div)
print(max_)
print(min_)
백트래킹을 이용해 모든 경우를 다 탐색하는 방법이다. 아직까지 재귀와 백트래킹 개념이 어려운 것 같다..
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 2630] 색종이 만들기 - Python (분할정복, 재귀) (0) | 2020.11.24 |
---|---|
[백준 14889] 스타트와 링크 - Python (브루트포스, 백트래킹) (0) | 2020.11.02 |
[백준 15652] N과 M (4) - Python (백트래킹, DFS) (0) | 2020.10.27 |
[백준 15651] N과 M (3) - Python (백트래킹, DFS) (0) | 2020.10.26 |
[백준 15650] N과 M (2) - Python (백트래킹, DFS, 조합) (0) | 2020.10.26 |