๋ฐ์ํ
๋ฐฑํธ๋ํน
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ณ ๋ คํ๋ ์๊ณ ๋ฆฌ์ฆ. ๋ต์ด๋ ์ ์๋ ํ๋ณด๋ ๋์ด์ ํ์ํ์ง ์๊ณ ๋ค์ ๋์๊ฐ๋ ์๊ณ ๋ฆฌ์ฆ
๋ฐฑํธ๋ํน ์ ์ฐจ
DFS - ์ ๋งํ ๋ ธ๋ ๊ฒํ - ์๋ธํธ๋ฆฌ ์ด๋ - ๋ฐฑํธ๋ํน ์ํ
- DFS ์ํ : ์ฌ๊ท๋ฅผ ํธ์ถํ๋ฉด์ DFS๋ฅผ ๊ทธ๋๋ก ์ํ
- ์ ๋งํ ๋ ธ๋ ๊ฒํ : ์ ๋งํ ๋ ธ๋๋ฉด ์๋ธํธ๋ฆฌ๋ก ์ด๋ํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฐฑํธ๋ํน์ ์ํํด์ผํจ
- ์๋ธํธ๋ฆฌ ์ด๋ : ๋ฐฉ๋ฌธํ ๋ ธ๋์ ํ์ ๋ ธ๋๋ก ์ด๋ํ์ฌ ๋ค์ ์ฌ๊ท๋ฅผ ํตํด DFS ์ํ
- ๋ฐฑํธ๋ํน ์ํ : ๋์ด์ ์ ํจํ ๋ ธ๋๋ผ๊ณ ์๊ฐ๋์ง ์์ผ๋ฉด ์์ ๋ ธ๋๋ก ๋ฐฑํ์ฌ ๋ฐฑํธ๋ํน ์ํ
๋ฐฑํธ๋ํน ๋ํ ์์
https://www.acmicpc.net/problem/15649
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()
https://www.acmicpc.net/problem/9663
func dfs(depth: Int, start: Int) {
// depth ๊ฐ ๋ฐ์ด๋๋ค๋ ๋ป์ ์ด๋ฏธ ํ ํ ๊ตฌ์ฑ์ด ์๋ฃ ๋๋ค๋ ๋ป
// ๊ทธ๋์ depth = n/2 ๊ฐ ๋๋ฉด, ํ๊ตฌ์ฑ๋ชปํ์ ๋ค์(false) team2์ ๋ฃ์ด์ค!!
if depth == n/2 {
team1 = 0
team2 = 0
for i in 0..<n{
for j in 0..<n{
if !visited[i] && !visited[j]{
team2 += s[i][j]
}
if visited[i] && visited[j] {
team1 += s[i][j]
}
}
}
// ๊ทธ๋ฆฌ๊ณ ํ๊ตฌ์ฑ์ด ์๋ฃ๋ ์ ๋ค์ ์ฐจ๋ฅผ ๊ตฌํด์ min๊ฐ์ ๊ณ์ ๊ฐฑ์ ์์ผ์ฃผ์
minResult = min(minResult, abs(team1 - team2))
return
}
for i in start..<n {
if !visited[i] {
visited[i] = true
dfs(depth: depth + 1, start: i)
visited[i] = false
}
}
}
๋ฐฑํธ๋ํน ์ดํด์ ๋์์ด ๋๋ ์์
https://www.youtube.com/watch?v=Enz2csssTCs
Ref
https://didu-story.tistory.com/270
https://didu-story.tistory.com/371
https://www.youtube.com/watch?v=Enz2csssTCs
๋ฐ์ํ
'๐ป CS > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] ์ด์งํ์(Binary Search) (0) | 2023.05.17 |
---|---|
๋นํธ๋ง์คํน (2) | 2023.05.13 |
[Swift] ๋์ ๊ณํ๋ฒ (Dynamic Programming) ์ดํดํ๊ธฐ (0) | 2023.04.12 |
[Swift] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2023.04.04 |
[Swift] (๋ถํ ์ ๋ณต) ํต ์ ๋ ฌ ๊ตฌํํด๋ณด๊ธฐ (0) | 2023.04.03 |