๋ฐ์ํ
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/15654
๋ฌธ์ ํ์ด
- ์ง๋๋ฒ์ ํ์ ํ๋ถ์ด ๋ง์ํด์ฃผ์ จ๋ ๊ฟํ์ด ์๊ฐ๋ฌ๋ค.
- ์ถ๋ ฅ๋๋ ์์ด์์, [ 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)
๋ฐ์ํ
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] (Swift) 1260๋ฒ - DFS์ BFS (0) | 2022.05.14 |
---|---|
[๋ฐฑ์ค] (Swift) 1759๋ฒ - ์ํธ ๋ง๋ค๊ธฐ (0) | 2022.05.10 |
[๋ฐฑ์ค] (Swift) 15651๋ฒ - N๊ณผ M (3) (5) | 2022.04.25 |
[๋ฐฑ์ค] (Swift) 1748๋ฒ - ์ ์ด์ด์ฐ๊ธฐ 1 (0) | 2022.04.20 |
[๋ฐฑ์ค] (Swift) 3085๋ฒ - ์ฌํ๊ฒ์ (์ค๋ต๋ ธํธๅฟ ) (0) | 2022.04.15 |