MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 14940๋ฒˆ: ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๋ณธ๋ฌธ

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

[swift] ๋ฐฑ์ค€ - 14940๋ฒˆ: ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ

MUKER 2023. 5. 9. 23:22
 

14940๋ฒˆ: ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ

์ง€๋„์˜ ํฌ๊ธฐ n๊ณผ m์ด ์ฃผ์–ด์ง„๋‹ค. n์€ ์„ธ๋กœ์˜ ํฌ๊ธฐ, m์€ ๊ฐ€๋กœ์˜ ํฌ๊ธฐ๋‹ค.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000) ๋‹ค์Œ n๊ฐœ์˜ ์ค„์— m๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. 0์€ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๋•…์ด๊ณ  1์€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋•…, 2๋Š” ๋ชฉํ‘œ์ง€์ ์ด

www.acmicpc.net


์„ฑ๊ณต ํ’€์ด

let dy = [0,0,1,-1]
let dx = [-1,1,0,0]

let NM = readLine()!.split(separator: " ").map { Int($0)! }
let (n,m) = (NM[0],NM[1])

var map = [[Int]]()
var queue = [(Int,Int)]()
var result = Array(repeating: Array(repeating: -1, count: m), count: n)

for i in 0..<n {
    let input = readLine()!.split(separator: " ").map { Int($0)! }
    for j in 0..<m {
        if input[j] == 2 { // ์‹œ์ž‘์ (์ˆซ์ž2)์ขŒํ‘œ queue์— ์ถ”๊ฐ€
            queue.append((i,j))
            result[i][j] = 0
        }
        if input[j] == 0 { // 0์€ result์— ๋ฏธ๋ฆฌ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
            result[i][j] = 0
        }
    }
    map.append(input)
}

while !queue.isEmpty {
    let now = queue.removeFirst()

    for i in 0..<4 {
        let moveY = dy[i] + now.0
        let moveX = dx[i] + now.1
        
        guard moveY >= 0 && moveY < n && moveX >= 0 && moveX < m else { continue }
        guard result[moveY][moveX] == -1 else { continue }
        
        result[moveY][moveX] = result[now.0][now.1] + 1
        
        queue.append((moveY,moveX))
    }
}

for i in result {
    i.forEach { print($0,terminator: " ") }
    print("")
}

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

BFS
- ์ง€๋‚˜๊ฐ€์ง€ ๋ชปํ•˜๋Š” 0์€ ๋ฏธ๋ฆฌ result๋ฐฐ์—ด์— 0์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•ด์ค˜์„œ ์˜ค๋‹ต ๋ฐฉ์ง€