본문 바로가기

개발/알고리즘

[백준] 브루트포스 - 14888번 연산자 끼워넣기

반응형
 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net

입력 

수와 수 사이에 끼워넣을 수 있는 N-1개의 연산자가 주어진다.
연산자는 덧셈(+), 뺄셈(-), 곱셈(×), 나눗셈(÷)으로만 이루어져 있다.
연산자를 어떻게 끼워넣어도 항상 -10억보다 크거나 같고, 10억보다 작거나 같은 결과가 나오는 입력만 주어진다.

출력

N개의 수와 N-1개의 연산자가 주어졌을 때,
만들 수 있는 식의 결과가 최대인 것과 최소인 것을 구하는 프로그램을 작성하시오.

풀이

하나의 값을 받고 하나의 연산자를 받아 값을 계산한다
그 후 현재의 max와 min 값을 비교해 조건을 충족할 경우 계산한 값을 넣어준다
입력받은 수를 하나씩 넘어가며 반복한다 

 

Swift 전체 코드

let input = Int(readLine()!)!
let numbers = readLine()!.split(separator: " ").map { Int("\($0)")}
var operators = readLine()!.split(separator: " ").map { Int("\($0)")}
var (max, min) = (-1_000_000_000, 1_000_000_000)

func dps(nextNumber: Int, index: Int) {
    if input == index {
        max = max > nextNumber ? max : nextNumber
        min = min < nextNumber ? min : nextNumber
    }
    
    for i in 0..<4 {
        if operators[i]! > 0 {
            operators[i]! -= 1
            var value = 0
            switch i {
            case 0:
                value = nextNumber + numbers[index]!
            case 1:
                value = nextNumber - numbers[index]!
            case 2:
                value = nextNumber * numbers[index]!
            default:
                value = nextNumber / numbers[index]!
            }
            
            dps(nextNumber: value, index: index+1)
            operators[i]! += 1
        }
    }
}

dps(nextNumber: numbers[0]!, index: 1)
print(max, min)
반응형