DP를 통해 숫자
N
을count
개를 만들 수 있는 수를 두 개로 분할해서 생각해본다.
- count = 1 + count -1 / 2 + count - 2 ... / 이기 때문이다.
import Foundation
func solution(_ N:Int, _ number:Int) -> Int {
var dp = Array(repeating: [Int](), count: 9)
for cnt in 1..<9 {
var curNumbers = Set<Int>()
var base = ""
for _ in 0..<cnt {
base += "\(N)"
}
curNumbers.insert(Int(base)!)
for i in 1..<cnt {
for j in dp[i] {
for k in dp[cnt-i] {
let numbers = Set(makeNumber(j, k))
numbers.map{curNumbers.insert($0)}
}
}
}
if curNumbers.contains(number) {
return cnt
}
dp[cnt] = Array(curNumbers)
}
return -1
}
func makeNumber(_ number1: Int, _ number2: Int) -> [Int] {
var numbers = [Int]()
numbers.append(number1 + number2)
numbers.append(number2 - number1)
numbers.append(number1 - number2)
numbers.append(number1 * number2)
if number1 != 0 {
numbers.append(number2 / number1)
}
if number2 != 0 {
numbers.append(number1 / number2)
}
return numbers
}