N๊ณผ M (3) ๋ฌธ์ ์์ ํ๊ฐ์ง ์์ธ๋ง ์ฒ๋ฆฌํด์ฃผ๋ฉด ํ๋ฆฐ๋ค. ๋ฐ๋ก ์ง์ ์ ๊ณ ๋ฅธ ์ซ์๋ณด๋ค ํ์ฌ ์ซ์๊ฐ ์์ ๊ฒฝ์ฐ(= ๋น๋ด๋ฆผ์ฐจ์) ํด๋น ์ซ์๋ ๊ฑด๋๋ด๋ค.
๋ฌธ์
https://www.acmicpc.net/problem/15652
๋ด๊ฐ ์์ฑํ ์ฝ๋
Swift
let input = readLine()!.split(separator: " ").map { Int(String($0))! }
let n = input[0]
let m = input[1]
var picked = [String]()
/*
n: ์ ์ฒด ์์์ ์
picked: ์ง๊ธ๊น์ง ๊ณ ๋ฅธ ์์๋ค์ ๋ฒํธ
toPick: ๋ ๊ณ ๋ฅผ ์์์ ์
์ผ ๋, ์์ผ๋ก toPick๊ฐ์ ์์๋ฅผ ๊ณ ๋ฅด๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ถ๋ ฅํ๋ค
*/
func pick(n: Int, toPick: Int) {
// ๊ธฐ์ ์ฌ๋ก: ๋ ๊ณ ๋ฅผ ์์๊ฐ ์์ ๋ ๊ณ ๋ฅธ ์์๋ค์ ์ถ๋ ฅํ๋ค.
if toPick == 0 {
print(picked.joined(separator: " "))
return
}
// ์์ ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค.
for next in 1...n {
// ๋ฐ๋ก ์ง์ ์ ๊ณ ๋ฅธ ์๋ณด๋ค ์์ผ๋ฉด ๊ฑด๋๋ด๋ค.
if let last = picked.last {
if Int(last)! > next {
continue
}
}
picked.append(String(next))
pick(n: n, toPick: toPick - 1)
picked.removeLast()
}
}
pick(n: n, toPick: m)