๐ ๋ฌธ์
https://www.acmicpc.net/problem/15649
๐ ๋ด๊ฐ ํผ ํ์ด
์ฒ์์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๊ฐ์ ์ก์ง ๋ชปํ๋ค. ์์ ํ์์ผ๋ก ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ํด์ ์ถ๋ ฅํด์ฃผ์ด์ผํ๋? ๊ณ ๋ฏผํ๋ค. (์ฝํ ์คํฐ๋์์ ํ์๋ ๋ฌธ์ ๋ฐ ์ ํ ๊ธฐ์ต์ด ๋์ง ์์๋ค.)
๊ฒฐ๊ตญ ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋์ง ํํธ๋ฅผ ์ป๊ณ ์ ์ธํฐ๋ท์ ์กฐ๊ธ ์ฐพ์๋ณด์๋ค. DFS์ ๋ฐฑํธ๋ํน ๊ฐ๋ ์ ์ด์ฉํ๋ ๊ฒ์ผ๋ก ๋ณด์๋ค.
๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ฉด, ์ DFS๋ก ํธ๋์ง๋ ์ดํด๊ฐ ๋๋๋ฐ, ๋ฐฑํธ๋ํน ๊ฐ๋ ์ด ๋ค์ด๊ฐ๊ฒ ๋ง๋์ง ์ดํด๊ฐ ๋์ง ์๋๋ค. ์ฌ๊ท๋ฅผ ๋๋ค๊ฐ ํ์ฌ ๋ด๊ฐ ์งํํ๊ณ ์๋ i ์ ๋ํด์ ํฌํจ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๊ณผ์ ์ด ๋ฐฑํธ๋ํน์ธ๊ฑด๊ฐ? (๋ฐฑํธ๋ํน = ์์ ํ์์ ํ์ง ์๊ณ ์ด๋ ์กฐ๊ฑด์ ์ ํด์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ผ๋ฉด ํ์ํ์ง ์๋ ๊ฒ) ์ด๋ผ๋ ๊ฐ๋ ์ ๋์๊ฒจ๋ณด๋ฉด ๋ง์ ์๋..?
์ฌ๊ท๋ก DFS๋ฅผ ํธ๋๊ฒ์ด ์ต์ํ์ง ์์์ ๊ทธ๋ฆผ์ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ทธ๋ฆฌ๋ฉด์ ์ฝ๋๋ฅผ ํด์ํ๋ฉด์ ๋ฌธ์ ๋ฅผ ํ์๋ค.
์ค๊ณ๋ฅผ ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ์ฌ๊ท๋,,, ๋์ ๋์ ์ํํ๋ ๊ฒ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ ์๊ฐํด์ผ ํ๋ฆฐ๋ค... (์์ง ๋๋ฌด ๋ถ์กฑํ๋ค ใ ํคใ ํค)
์ด ๊ฒ์ ๊ทธ๋๋ก ์ฝ๋๋ก ์ฎ๊ธฐ๋ฉด ๋ค์๊ณผ๊ฐ๋ค.
๐ ์ ๋ต์ฝ๋
var nm = readLine()!.split(separator: " ").map{ Int($0)! }
let N = nm[0]
let M = nm[1]
var stack = [Int]()
private func dfs() {
if stack.count == M {
print(stack.map{ String($0) }.joined(separator:" "))
return
}
for i in 1...N {
if !stack.contains(i) {
stack.append(i)
dfs()
stack.removeLast()
}
}
}
dfs()