[프로그래머스 LV3] N으로 표현

Junyoung Park·2022년 8월 12일
0

코딩테스트

목록 보기
551/631
post-thumbnail

1. 문제 설명

N으로 표현

2. 문제 분석

DP를 통해 숫자 Ncount개를 만들 수 있는 수를 두 개로 분할해서 생각해본다.

  • count = 1 + count -1 / 2 + count - 2 ... / 이기 때문이다.

3. 나의 풀이

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
}
profile
JUST DO IT

0개의 댓글