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())
numbers = list(map(int, input().split()))
symbols = list(map(int, input().split()))
min_val = 1000000000
max_val = -1000000000
def cal(idx, val, plus, minus, multiply, divide):
global min_val, max_val
if idx == N:
max_val = max(max_val, val)
min_val = min(min_val, val)
return
if plus:
cal(idx+1, val+numbers[idx], plus-1, minus, multiply, divide)
if minus:
cal(idx+1, val-numbers[idx], plus, minus-1, multiply, divide)
if multiply:
cal(idx+1, val*numbers[idx], plus, minus, multiply-1, divide)
if divide:
cal(idx+1, int(val/numbers[idx]), plus, minus, multiply, divide-1)
cal(1, numbers[0], symbols[0], symbols[1], symbols[2], symbols[3])
print(max_val)
print(min_val)
결과

백트래킹으로 모든 연산들을 하는 방법으로 계산을 다 했을 때의 값을 최솟값과 최댓값과 비교하며 값을 갱신하기! 아직 백트래킹 어렵다... 그냥 재귀 어려워ㅜㅜㅜ
'스터디 1일 1커밋' 카테고리의 다른 글
| 240415 [BOJ/백준] 25418. 정수 a를 k로 만들기 (0) | 2024.04.15 |
|---|---|
| 240414 [BOJ/백준] 4963. 섬의 개수 (0) | 2024.04.14 |
| 240410 [BOJ/백준] 1743. 음식물 피하기 (0) | 2024.04.10 |
| 240410 [BOJ/백준] 18352. 특정 거리의 도시 찾기 (0) | 2024.04.10 |
| 240408 [BOJ/백준] 7576. 토마토 (0) | 2024.04.08 |