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