Algorithm/Baekjoon
[๋ฐฑ์ค] (Swift) 15654๋ฒ - N๊ณผ M (5) (DFS๋ก ํ๊ธฐ!)
๊ฐ์ ๐ฅ
2022. 5. 4. 14:44
๋ฐ์ํ
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/15654
15654๋ฒ: N๊ณผ M (5)
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. N๊ฐ์ ์์ฐ์๋ ๋ชจ๋ ๋ค๋ฅธ ์์ด๋ค. N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
www.acmicpc.net
๋ฌธ์ ํ์ด
- ์ง๋๋ฒ์ ํ์ ํ๋ถ์ด ๋ง์ํด์ฃผ์ จ๋ ๊ฟํ์ด ์๊ฐ๋ฌ๋ค.
- ์ถ๋ ฅ๋๋ ์์ด์์, [ 1 1 ] [ 2 2 ] ์ ๊ฐ์ด ์ค๋ณต๋๋ ๊ฐ์ด ์๋ค์ด์์ง ์์๊ฐ? ๊ทธ๋ ๋ค๋ฉด visited ์ฒดํฌ๋ฅผ ํ๋ค๋ ๋ป์ด๋ค!
- ์ด ๋ง์ ๊ธฐ์ตํ๋ฉด์ ์ฐจ๊ทผ์ฐจ๊ทผ dfs๋ก ๊ตฌํํ๋ค.
- dfs๋ก ๊ตฌํํ ์ด์ ๋? ์์ด์ ๋ด๊ธฐ ์ํด์ ๋ชจ๋ ์๋ฅผ ํ์ํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค!
๋ฆฌ์คํธ๋ก ๋ด์ ๊ฒ์ ์ถ๋ ฅํ๋ ๊ฒ์ด ์ ๋ง ์ด๋ ค์ ๋ค. ํ์๋ค์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ถ๋ ฅํ๋ ๋ฐฉ์์ ์ฑํํ๋ค!
let nm = readLine()!.split(separator: " ").map { Int(String($0))! }
let nums = readLine()!.split(separator: " ").map { Int(String($0))! }.sorted(by: <)
let N = nm[0]
let M = nm[1]
var result: [Int] = []
var visited = Array(repeating: false, count: N)
func dfs(num: Int) {
if num == M {
print(result.map({String($0)}).joined(separator: " "))
return
}
for i in 0..<N {
if visited[i] == false {
visited[i] = true
result.append(nums[i])
dfs(num: num+1)
visited[i] = false
result.removeLast()
}
}
}
dfs(num: 0)
๋ฐ์ํ