[๋ฐฑ์ค] (Swift) 1743๋ฒ - ์์๋ฌผ ํผํ๊ธฐ (DFS)
๐ฌ ์ก๋ด๋ถํฐ start
์ด์ ์น๊ตฌ์ ๊น์ dfs ์ bfs์ ๋ํด์ ๊ณ ์ฐฐํด๋ณธ ๋ค, ์ฒซ ๋ฌธ์ ํ์ด๋ค. dfs/bfs๊ด๋ จ ๋ฌธ์ ๋ฅผ ๊ทธ๋๋ ... 50๊ฐ์ ๋... ๋ ํ์๋..? ๊ทธ ์ด์์ธ๊ฐ.. ์ด์จ๋ ๊ทธ์ ๋ ํธ๋๊น ๋ฌธ์ ์ ํ์ ๋์ ์ ์ถฉ ํ์ ํ๊ณ .. ์ด์ ์ด๊ฒ ์ ๋ง BFS์ธ์ง DFS์ธ์ง ๋จธ๋ฆฌ๋ฅผ ๊ตด๋ฆฌ๊ธฐ ์์ํ๋ค. (์๋์์ผ๋ฉด ๋์ถฉ ๊ทธ๋ ์ํ=bfs์ง! ๋ผ๋ ๋ฐ๋ณด๊ฐ์ ์๋ฆฌ๋ฅผ ์ ์ด๋ด๋ ค๊ฐ๊ณ ์๊ฒ ์ง. ๋กํ,,,๋ง์ดํ๋๋) ์๋๋ ๋ด๊ฐ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์๋ชป ์ง๊ณ ๋์ด๊ฐ๋ BFS์ DFS์ ๋ํ ๊ฐ๋ ์ ์ดํด๋ณผ ์ ์๋ค.
https://didu-story.tistory.com/422
[์๊ณ ๋ฆฌ์ฆ] 2023.02.25 DFS์ BFS์ ๋ํ ๊ณ ์ฐฐ
โซ๏ธ ์๋ชป๋ ๋ฐฉํฅ ์์ฆ BFS์ DFS ๋ฌธ์ ๋ฅผ ํ๊ณ ์๋ค. ๋น๊ต์ ์ต๊ทผ์ ํ์๋ ๋ฌธ์ ์ค 'ํ๋ก๊ทธ๋๋จธ์ค ํ๊ฒ๋๋ฒ'๋ฅผ ํ๋ฉด์ ํ์ด๋ฅผ ์์ฑํ๊ณ , ๋ด๊ฐ ๊ณ ๋ฏผํด์จ ๊ณผ์ ์ ๋ธ๋ก๊ทธ์ ๋จ๊ฒผ๋๋ฐ ์ด ๊ธ์ ๋ณธ ์น๊ตฌ
didu-story.tistory.com
์ด๋ฌํ ์๊ฐ์ ๊ฐ๊ณ ๋ฌธ์ ๋ฅผ ์ ๊ทผํ๋ DFS๊ฐ ๋ญ์ง, BFS๊ฐ ๋ญ์ง ์ ํํ๊ฒ ํ์ ํ ์ ์์๋ค. ์ญ์, ๊ฐ๋ ๋ง ๋ณด๊ณ ๋ฌดํฑ๋๊ณ ์๋ฌด๊ฑฐ๋ ๊ตฌํํ๋ ๋ถ๊ณผ 1์ฃผ์ผ์ ์ ๋์๋ ์กฐ๊ธ ๋ฌ๋ผ์ก๋ค. ๋ฟ--๋ฏ,, ํ๋ฌ๊น ^__ ^ ๋ญ์ด์จ๋ ,, ๋ฌธ์ ํ์ด ใฑ
โซ๏ธ ๋ฌธ์
https://www.acmicpc.net/problem/1743
1743๋ฒ: ์์๋ฌผ ํผํ๊ธฐ
์ฒซ์งธ ์ค์ ํต๋ก์ ์ธ๋ก ๊ธธ์ด N(1 ≤ N ≤ 100)๊ณผ ๊ฐ๋ก ๊ธธ์ด M(1 ≤ M ≤ 100) ๊ทธ๋ฆฌ๊ณ ์์๋ฌผ ์ฐ๋ ๊ธฐ์ ๊ฐ์ K(1 ≤ K ≤ N×M)์ด ์ฃผ์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ K๊ฐ์ ์ค์ ์์๋ฌผ์ด ๋จ์ด์ง ์ขํ (r, c)๊ฐ ์ฃผ์ด์ง๋ค
www.acmicpc.net
โซ๏ธ ๋์ ํ์ด
์ด๋ฌธ์ ๋ DFS๋ฅผ ์ด์ฉํด์ ํ์๋ค. ๋ด๊ฐ ์ฒ์์ ์๊ฐํ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
dfs๋ฅผ ์ด์ฉํด์ ์ฐ๊ฒฐ๋ ๋
ธ๋์ค ์ ์ผ ๊น์๊ณณ๊น์ง ํ์ ํ๊ณ cnt๋ฅผ ๊ฐฑ์ ํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
์ฌ๊ธฐ์๋ visited ๋ณ์๋ ๋ฐ๋ก ๋ง๋ค์ด๋จ๊ณ , cnt๋ฅผ answer์ด๋ผ๋ ๋ฐฐ์ด์ ๋ฃ์ด ๊ทธ์ค์์ max๊ฐ์ ์ฐพ๋ ๊ฒ์ผ๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ ธ์ง๋ง, ์ค์ ์ฝ๋๋ฅผ์์ฑํ ๋๋ ํ๋ฆ์ ๊ฐ์ง๋ง ์กฐ๊ธ ๋ณํ๋๊ฒ ์ฝ๋๋ฅผ ๊ตฌํํ๋ค.
๊ตณ์ด visited ๋ฐฐ์ด์ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ , ์ ์ด์ ์ ๋ ฅ๋๋ arr๋ฅผ ์ฌ์ฉํ๋ค. ์ ๋ ฅ์ ๋ฐ์๋ ์์ฐ๊ฐ ์๋ ๊ณณ์๋ -1์ ๋ฃ์ด์ฃผ์๊ณ , dfs๋ฅผ ๋๋ฆฌ๋ฉด์ ์์ฐ์ ๊ฐฏ์๋ฅผ ์ธ์ด์ค๋ +1์ฉํด์ 1, 2,3,4, ์ด๋ฐ์์ผ๋ก ์๋ฅผ ์ฑ์์ฃผ์๋ค.
๊ฒฐ๊ณผ๋ ์ด๋ ๊ฒ ๋๋ค. ์์ฐ๊ฐ ์์ํ ๋๋ 1๋ก ์์ํ๋ค. arr[0][0]์๋ฆฌ์ ์๋ ์์ฐ๋ ๋ฉ๊ทธ๋ฌ๋ ๋์ฌ์๋ ํ๊ฐ์ง๋ฆฌ ์์ฐ๊ธฐ ๋๋ฌธ์ 1๋ก๋ง ์ ๋ ฅ๋์๊ณ , ๋ค์ ๋ณด๋ฉด 4๊ฐ์ง๋ฆฌ๊ฐ ์ฐ๊ฒฐ๋ ์์ฐ์๋ 1,2,3,4 ์์๋๋ก ์ ๋ ฅ๋์ด์๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ํฐ max 4๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
โซ๏ธ ์ ๋ต์ฝ๋
import Foundation
let nmk = readLine()!.split(separator: " ").map { Int($0)! }
var arr = Array(repeating: Array(repeating: 0, count: nmk[1]), count: nmk[0])
var answer = -9999
var cnt = 0
// MARK: - ๋ฐฉํฅํค ์ํ์ข์ฐ
let dx = [-1, 1, 0, 0]
let dy = [0, 0, -1, 1]
// MARK: - ์์ฐ ์์ผ๋ฉด -1, ์์ผ๋ฉด 0
for _ in 0..<nmk[2] {
let rc = readLine()!.split(separator: " ").map{ Int($0)! }
arr[rc[0]-1][rc[1]-1] = -1
}
private func dfs(x: Int, y: Int) {
cnt += 1
arr[x][y] = cnt
for i in 0..<4 {
let nx = x + dx[i]
let ny = y + dy[i]
if nx < 0 || ny < 0 || nx >= nmk[0] || ny >= nmk[1] {
continue
}
if arr[nx][ny] == -1 {
arr[nx][ny] = cnt
dfs(x: nx, y: ny)
}
}
}
for i in 0..<nmk[0] {
for j in 0..<nmk[1] {
if arr[i][j] == -1 {
cnt = 0
dfs(x: i, y: j)
}
if answer < arr[i][j] {
answer = arr[i][j]
}
}
}
print(answer)
์ ์ ๊ฐ๋ ์ด ์กํ๊ฐ๋ฉด์ ํ๋ฆฌ๋ ๋ฌธ์ ๋ค์ ๋ณด๋๊น ๊ธฐ๋ถ์ด ์ข๊ณ ์ฌ๋ฐ๋ค! ๋ฌผ๋ก ์ด ๋ฌธ์ ๋ DFS์์ ๊ฐ์ฅ ๊ธฐ์ด๊ฐ ๋๋ ๋ฌธ์ ์ด๊ธฐ์.. ์์ง ์ฌ๋ฐ์ดํ๊ณ ๊ธฐ์๊ธด ์ด๋ฅด์ง๋ง,,, ๊ทธ๋๋ ๊ธฐ๋ถ์ด ์ข์๊ฑธ ์ด๋กํด