1. ๋ฌธ์
2. ์ ์ถ๋ ฅ
3. ์ ์ถ๋ ฅ ์์
4. ๋ฌธ์ ์ค๊ณ
- ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ค BFS ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ ํจ
- DFS๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์ ์๋ ์์ง๋ง, ๊น์ด์ฐ์ ํ์์ ๊ณ์ ํด์ ๋ฎ์ ๋ ๋ฒจ๋ก ํ์ํ๋ฏ๋ก ์ ์ ํ์ง ์์
- ์ธ์ ํ ๋ ธ๋๋ค๋ถํฐ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ๋ ๋๋น์ฐ์ ํ์์ผ๋ก ๋ฐฉ๋ฌธํ ๋๋ง๋ค ๊ฑฐ๋ฆฌ๋ฅผ ์ด์ ๋ ธ๋์ ๊ฑฐ๋ฆฌ์ + 1 ์ฉ ๋์ ์ํค๊ณ ,
- ๋ง์ง๋ง์ผ๋ก ๋ชฉ์ ์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํจ์ผ๋ก์จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์
5. ์ ์ฒด ์ฝ๋
//MARK: - ๋ฏธ๋ก ์ฐพ๊ธฐ
//MARK: - Framework
import Foundation
//MARK: - Type
struct Node {
//MARK: - Property
var x, y: Int
//MARK: - Initializer
init(_ x: Int, _ y: Int) {
self.x = x
self.y = y
}
}
//MARK: - Variable
var N: Int = 0
var M: Int = 0
var graph: [[Int]] = []
var visited: [[Bool]] = []
var distances: [[Int]] = []
var dx: [Int] = [0, 0, -1, 1]
var dy: [Int] = [-1, 1, 0, 0]
//MARK: - Function
func bfs(_ x: Int, _ y: Int) -> Int {
var queue: [Node] = []
queue.append(Node(x, y))
visited[x][y] = true
while !queue.isEmpty {
let currentNode: Node = queue.removeFirst()
for i in 0..<4 {
let nx: Int = currentNode.x + dx[i]
let ny: Int = currentNode.y + dy[i]
if !visited[nx][ny] && graph[nx][ny] == 0 {
visited[nx][ny] = true
queue.append(Node(nx, ny))
distances[nx][ny] = distances[currentNode.x][currentNode.y] + 1
}
}
}
return distances[1][M]
}
func solution() -> Void {
//MARK: - Input
guard let input: [String] = readLine()?.components(separatedBy: " ") else { return }
var result: Int = 0
N = input.map { Int($0) }[0] ?? 0
M = input.map { Int($0) }[1] ?? 0
graph = Array(repeating: Array(repeating: 1, count: M + 10), count: N + 10)
visited = Array(repeating: Array(repeating: false, count: M + 10), count: N + 10)
distances = Array(repeating: Array(repeating: 0, count: M + 10), count: N + 10)
for i in 1...N {
guard let inputData: [String] = readLine()?.components(separatedBy: " ") else { return }
let data: [Int] = inputData.map { Int($0) ?? 0 }
for j in 1...M {
graph[i][j] = data[j - 1]
}
}
//MARK: - Process
result = bfs(N, 1)
//MARK: - Output
print(result)
}
solution()
์ ์ฒด์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค.
'Swift Data Structure And Algorithm > Graph Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์ํ ๊ณ์ฐ๊ธฐ (0) | 2022.04.15 |
---|---|
๋จ์ง ๋ฒํธ ๋ถ์ด๊ธฐ_BFS (0) | 2022.04.15 |
์ ๋ฐ์ด๋ฌ์ค_BFS (0) | 2022.04.15 |
์ด๋ถ ๊ทธ๋ํ ํ๋ณ_BFS (0) | 2022.04.15 |
2์์น ํ๊ธฐ_BFS (0) | 2022.04.15 |