본문 바로가기
알고리즘

[Swift] 백준 14888번 연산자 끼워넣기

by 고고 2022. 3. 19.

링크: 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)

댓글