youngjaeLee1026 2022. 3. 31. 12:19

1. ๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-03-31 12 15 32

2. ์ž…์ถœ๋ ฅ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-03-31 12 15 57

3. ์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2022-03-31 12 16 15

4. ๋ฌธ์ œ ์„ค๊ณ„

  1. n - 1 ๋ถ€ํ„ฐ ์ •์ˆ˜๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋†“์•„๋ด„์œผ๋กœ์จ, ๊ทธ ํ•ฉ์ด n์ด ๋˜๋„๋ก ๊ฒฐ์ •ํ•˜๋Š” ๊ตฌ์กฐ์ด๋ฏ€๋กœ
  2. ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•œ Back-tracking ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ
  3. ํฐ ์ˆ˜๋ถ€ํ„ฐ ๊ฒฐ์ •๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ํฐ ์ˆ˜(n - 1)๋ถ€ํ„ฐ ์ฐจ๋ก€์ฐจ๋ก€ ๋†“์œผ๋ฉด์„œ ํ˜„์žฌ ๋†“์•„์•ผํ•˜๋Š” ์ˆซ์ž๊ฐ€ ์ด์ „ ์ˆซ์ž๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ๋Š” ์ œ์™ธ์‹œํ‚ด์œผ๋กœ์จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ
  4. ํ˜„์žฌ ์ˆซ์ž์˜ ํ•ฉ์ด n์ด ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ธฐ์ €์กฐ๊ฑด์ด ๋จ

5. ์ „์ฒด ์ฝ”๋“œ

 

//MARK: - division

//MARK: - Framework
import Foundation

//MARK: - Variable
var count: Int = 0

//MARK: - Function
func getDivision(_ currentSum: Int, _ current: Int, _ n: Int, _ result: inout [Int]) -> Void {
    if currentSum == n {
        var answer: String = ""
        for i in 0..<current - 1 {
            answer += "\(result[i])+"
        }
        answer += "\(result[current - 1])"
        print(answer)
        count += 1
    } else {
        let currentNumber: Int = current == 0 ? n - 1 : n - currentSum
        for i in stride(from: currentNumber, through: 1, by: -1) {
            if current > 0 && result[current - 1] < i {
                continue
            }
            result[current] = i
            getDivision(currentSum + i, current + 1, n, &result)
        }
    }
}

func solution() -> Void {
    //MARK: - Input
    guard let n: Int = Int(readLine() ?? "0") else { return }
    var result: [Int] = Array(repeating: 0, count: n + 10)
    
    //MARK: - Process & Output
    getDivision(0, 0, n, &result)
    print(count)
}
solution()

 

์ „์ฒด์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.