알고리즘
[Swift] 백준 14888번 연산자 끼워넣기
고고
2022. 3. 19. 11:29
링크: https://www.acmicpc.net/problem/14888
14888번: 연산자 끼워넣기
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수,
www.acmicpc.net
+, -, *, / 연산자가 남아있으면 재귀함수를 돌며 연산자를 끼워넣습니다.
import Foundation
let N = Int(readLine()!)!
let numbers = readLine()!.split(separator: " ").map { Int(String($0))! }
let operators = readLine()!.split(separator: " ").map { Int(String($0))! }
var add = operators[0]
var sub = operators[1]
var mul = operators[2]
var div = operators[3]
var minResult = Int.max
var maxResult = Int.min
func dfs(_ index: Int, _ now: Int) {
if index == numbers.count {
minResult = min(minResult, now)
maxResult = max(maxResult, now)
return
}
if add > 0 {
add -= 1
dfs(index + 1, now + numbers[index])
add += 1
}
if sub > 0 {
sub -= 1
dfs(index + 1, now - numbers[index])
sub += 1
}
if mul > 0 {
mul -= 1
dfs(index + 1, now * numbers[index])
mul += 1
}
if div > 0 {
div -= 1
dfs(index + 1, now / numbers[index])
div += 1
}
}
dfs(1, numbers[0])
print(maxResult)
print(minResult)