๋ฐ์ํ
๐ป ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2178
๐ป ๋ฌธ์ ํ์ด
๊ธฐ๋ณธ์ ์ด BFS ๋ฌธ์ ์ด๋ค. ๋ฏธ๋ก๋ฅผ ๊ฐ์ค์น ์๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ๋ก ๋ณธ๋ค๋ฉด, ๊ฐ์ค์น์๋ ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ BFS ํ์ ๋ฐฉ๋ฒ์ ์ด์ฉํ๋ฉด๋๋ค!
- ์ฒ์ ์ ๋ ฅ๋ฐ๋ n๊ณผ m์ nm ๋ฐฐ์ด๋ก ์ ๋ ฅ๋ฐ์์ nm[0], nm[1] ๋ก ์ฌ์ฉํ์๋ค.
- dx, dy ๋ ์ํ์ข์ฐ ๋ฐฉํฅ์ ๋ํ๋ด๋ ๋ฐฉํฅํค! ์ด๋ค.
- arr๋ ์ ๋ ฅ๋ฐ๋ ๋ฏธ๋ก
- visited๋ ๋ฏธ๋ก์์ ๋ฐฉ๋ฌธํ๋์ง ์ํ๋์ง T/F ๋ก ๋ํ๋ด๋ ๋ฐฐ์ด
- distance๋ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ๋ ํ๋์ฉ +1 ํด์ ๋ง์ง๋ง์ distance[n][m]์ผ๋ก ๋ต์ ์ถ๋ ฅํด ์ค ๊ฒ์ด๋ค.
๊ธฐ๋ณธ์ ์ธ bfs ๋ฌธ์ ๋ก ๋์ด์ queue๊ฐ ์กด์ฌํ์ง ์์๋๊น์ง while๋ฌธ์ ๋๋ ค์ ๋ต์ ๊ตฌํ ์ ์๋ค.
๐ป ์์ค์ฝ๋
//
// File.swift
// Algorithm
//
// Created by ์ด์ง์ on 2022/06/23.
//
var nm = readLine()!.split(separator: " ").map { Int(String($0))! }
let dx = [0, 0, -1, 1]
let dy = [-1, 1, 0, 0] // ์ํ์ข์ฐ
var arr = [[Int]]()
var visited = Array(repeating: Array(repeating: false, count: nm[1]), count: nm[0])
var distance = Array(repeating: Array(repeating: 0, count: nm[1]), count: nm[0])
for _ in 0..<nm[0] {
var temp = Array(readLine()!).map { Int(String($0))! }
arr.append(temp)
}
func bfs() {
distance[0][0] = 1
visited[0][0] = true
var queue: [[Int]] = [[0,0]]
while !queue.isEmpty {
let pop = queue.removeFirst()
let x = pop[0]
let y = pop[1]
for i in 0..<4 {
let nx = x + dx[i]
let ny = y + dy[i]
if nx >= 0 && nx < nm[0] && ny >= 0 && ny < nm[1] {
if !visited[nx][ny] && arr[nx][ny] == 1 {
distance[nx][ny] = distance[x][y] + 1
visited[nx][ny] = true
queue.append([nx, ny])
}
}
}
}
}
bfs()
print(distance[nm[0]-1][nm[1]-1])
๋ฐ์ํ