youngjaeLee1026
2022. 3. 31. 12:19
1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- n - 1 ๋ถํฐ ์ ์๋ฅผ ํ๋ํ๋ ๋์๋ด์ผ๋ก์จ, ๊ทธ ํฉ์ด n์ด ๋๋๋ก ๊ฒฐ์ ํ๋ ๊ตฌ์กฐ์ด๋ฏ๋ก
- ์ฌ๊ทํจ์๋ฅผ ํตํ Back-tracking ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
- ํฐ ์๋ถํฐ ๊ฒฐ์ ๋์ด์ผ ํ๋ฏ๋ก ํฐ ์(n - 1)๋ถํฐ ์ฐจ๋ก์ฐจ๋ก ๋์ผ๋ฉด์ ํ์ฌ ๋์์ผํ๋ ์ซ์๊ฐ ์ด์ ์ซ์๋ณด๋ค ํฐ ๊ฒฝ์ฐ๋ ์ ์ธ์ํด์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
- ํ์ฌ ์ซ์์ ํฉ์ด 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()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.