14888번: 연산자 끼워넣기
문제 풀이 아이디어
- 모든 경우의 수를 따져서 완전 탐색해야 합니다.
- 대표적인 dfs 문제인 동서남북 이동 문제와 결국 동일한 구조입니다.
- 동서남북 문제처럼 연산자도 배열에 넣어두고 사용하면 코드가 보기 좋아집니다.
코드
typealias Operation = (Int, Int) -> Int
func add(_ x: Int, _ y: Int) -> Int { x + y }
func substract(_ x: Int, _ y: Int) -> Int { x - y }
func multiply(_ x: Int, _ y: Int) -> Int { x * y }
func devide(_ x: Int, _ y: Int) -> Int { x / y }
let operations: [Operation] = [add, substract, multiply, devide]
let N = Int(readLine()!)!
let array = readLine()!.split(separator: " ").map { Int(String($0))! }
var numOfOperations = readLine()!.split(separator: " ").map { Int(String($0))! }
var results = [Int]()
func dfs(nowIndex: Int, result: Int) {
if nowIndex == N {
results.append(result)
return
}
for i in 0..<4 {
if numOfOperations[i] != 0 {
numOfOperations[i] -= 1
dfs(nowIndex: nowIndex + 1, result: operations[i](result, array[nowIndex]))
numOfOperations[i] += 1
}
}
}
dfs(nowIndex: 1, result: array[0])
print(results.max()!)
print(results.min()!)