# 문제 요약
- 재료 안에 신맛과 쓴맛이 함께 포함된다. 맛 계산 시 해당 신맛과 쓴맛은 동시에 활용해야함
- 1개 재료를 뽑을지 2개 재료를 뽑을지 순회하며 nC1, nC2를 계산한다.
- 뽑힌 재료 인덱스를 기반으로 맛 최종 계산
import Foundation
let N = Int(readLine()!)!
var ingredient: [(Int, Int)] = []
var minValue = Int.max
for _ in 0..<N {
let input = readLine()!.split(separator: " ").map { Int($0)! }
ingredient.append((input[0], input[1]))
}
func combination<T>(_ elements: [T], _ k: Int) -> [[T]] {
var ret: [[T]] = []
func combi(_ index: Int, _ now: [T]) {
if now.count == k {
ret.append(now)
return
}
for i in index..<elements.count {
combi(i+1, now + [elements[i]])
}
}
combi(0, [])
return ret
}
var indices: [Int] = []
for i in 0..<N {
indices.append(i)
}
for i in 1...N {
for indexSet in combination(indices, i) {
var sourValue = 1
var bitterValue = 0
for index in indexSet {
sourValue *= ingredient[index].0
bitterValue += ingredient[index].1
}
minValue = min(abs(sourValue - bitterValue), minValue)
}
}
print(minValue)