링크: https://www.acmicpc.net/problem/14888
+, -, *, / 연산자가 남아있으면 재귀함수를 돌며 연산자를 끼워넣습니다.
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)
'알고리즘' 카테고리의 다른 글
[Swift] 백준 1475번 방 번호 (0) | 2022.03.21 |
---|---|
[Swift] 백준 10814번 나이순 정렬 (0) | 2022.03.21 |
[Swift] 백준 2609번 최대공약수와 최소공배수 (0) | 2022.03.18 |
[Swift] 백준 2581번 소수 (0) | 2022.03.18 |
[Swift] 백준 10818번 최소, 최대 (0) | 2022.03.18 |
댓글