MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰

MUKER 2023. 4. 9. 23:36
 

2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


๋‚˜์˜ ํ’€์ด

let NM = readLine()!.split(separator: " ").map { Int($0)! }
let (N,M) = (NM[0],NM[1])
var maze = [[Int]]()
let moveX = [0,0,1,-1]
let moveY = [1,-1,0,0]
var queue = [(0,0)]
var result = 1

for _ in 0..<N {
    maze.append(readLine()!.map { Int(String($0))! })
}

while !queue.isEmpty {
    let pop = queue.removeFirst()
    for i in 0..<4 {
        let nowY = pop.0+moveY[i]
        let nowX = pop.1+moveX[i]
        guard nowY >= 0 && nowY < N && nowX >= 0 && nowX < M else { continue }
        if maze[nowY][nowX] == 1 {
            maze[nowY][nowX] = maze[pop.0][pop.1] + 1
            queue.append((nowY,nowX))
        }
    }
}
print(maze[N-1][M-1])

ํ’€์ด ํ‚ค์›Œ๋“œ

BFS
๋„“์ด ์šฐ์„  ํƒ์ƒ‰์€ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š”๋ฐ ์œ ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๋ฏธ๋กœ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋กœ
๊ธฐ๋ณธ์ ์ธ BFS๊ตฌํ˜„์„ ์•Œ๋ฉด ํ’€ ์ˆ˜ ์žˆ๋‹ค.

๋ณ€์ˆ˜ maze ๋ฐฐ์—ด์€ ์ดˆ๊ธฐ์— 1,0์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฏธ๋กœ๋ฅผ ๋‹ด๊ณ  ์žˆ์ง€๋งŒ
ํƒ์ƒ‰์„ ํ†ตํ•ด ๋‚˜์•„๊ฐ„ ๊ฑฐ๋ฆฌ๋งŒํผ maze๋ฐฐ์—ด์— ์ €์žฅ์‹œ์ผœ์คฌ๋‹ค.

์˜ˆ์ œ)

์ž…๋ ฅ ๊ฐ’ :

4 6
110110
110110
111111
111101

ํƒ์ƒ‰์ด ๋๋‚œ maze๋ฐฐ์—ด :
[3, 2, 0, 8, 9, 0]
[2, 3, 0, 7, 8, 0]
[3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 0, 9]