Notice
Recent Posts
Recent Comments
Link
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[Swift] BOJ 2178 ๋ฏธ๋กœ ํƒ์ƒ‰ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ

[Swift] BOJ 2178 ๋ฏธ๋กœ ํƒ์ƒ‰

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 4. 2. 23:04

BOJ 2178 ๋ฏธ๋กœ ํƒ์ƒ‰

 

โœ… BFS ๋ฌธ์ œ์˜€๋‹ค.

DFS์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๊นŠ๊ฒŒ ํƒ์ƒ‰ํ•˜์—ฌ ๊ทธ ๋…ธ๋“œ๊ฐ€ ์ตœ์„ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ๊ธฐํšŒ๋น„์šฉ์ด ๋” ๋“ค์–ด๊ฐ„๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋™๋นˆ ์ฑ…์—์„œ๋„ DFS๋ณด๋‹ค BFS๊ฐ€ ์ผ๋ฐ˜์ ์ธ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๋” ๋น ๋ฅด๋‹ค๊ณ  ๊ถŒ์žฅํ•จ.

 

์ผ๋‹จ BFS์— ์•„์ง ์ต์ˆ™์น˜ ์•Š์•„์„œ ์–ด๋ ค์› ์Œ.

๊ทธ๋™์•ˆ ๋ฌธ์ œ ํ’€๋ฉด์„œ ๊ฐ€์žฅ ์–ด๋ ค์› ๋˜ ์œ ํ˜•์ด ์ด๋ ‡๊ฒŒ N x M ๋ฐฐ์—ด์—์„œ ๋ฌด์–ธ๊ฐ€ ์ตœ์„ ์˜ ๊ฐ’์„ ๊ตฌํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด๋ฉด ์ง„์งœ ํž˜๋“ค์—ˆ์Œ.

๋‚˜๋ฆ„์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ฒ ๋‹ค๊ณ  ํ•œ ๊ฒƒ์ด ์žฌ๊ท€๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์–ด๋ณด๋ ค๋Š” ์‹œ๋„๋ฅผ ์•„์ฃผ ๋งŽ์ด ํ•ด๋ณด์•˜์œผ๋‚˜, ๋Œ€๋ถ€๋ถ„ fail.

BFS ๊ณต๋ถ€๋Š” ์ง„์งœ ๋งŽ์ด ํ–ˆ๋Š”๋ฐ, ์ ์šฉ์ด ๋„์ €ํžˆ ์•ˆ๋˜๊ฒ ์–ด์„œ ๊ตฌ๊ธ€๋ง์˜ ๋„์›€์„ ๋ฐ›์•„ ์ ์šฉ์‹œ์ผœ๋ด„

 

โœ… ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆœ์„œ 

1. queue์— ์‹œ์ž‘์ ์„ ์„ธํŒ…ํ•œ๋‹ค.

2. ํ˜„์žฌ์œ„์น˜์—์„œ ์ƒํ•˜์ขŒ์šฐ 4๋ฒˆ์˜ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ for๋ฌธ์„ ๋Œ๋ฉด์„œ ๋‹ค์Œ๋ฒˆ ์ด๋™ ๊ฐ€๋Šฅํ•œ ์œ„์น˜(nx,ny)๊ฐ’์„ ๊ตฌํ•œ๋‹ค.

3. ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋Š”๋‹ค.

if (๋ณด๋“œ์•ˆ์— ๋‹ค์Œ๋ฒˆ ์ขŒํ‘œ๊ฐ€ ์œ„์น˜ํ•œ๋‹ค.) && (์ด์ „์— ๋ฐฉ๋ฌธํ–ˆ๋˜ ์žฅ์†Œ๊ฐ€ ์•„๋‹ˆ๋‹ค.) { 
    if (๋ณด๋“œ์˜ ์ขŒํ‘œ๊ฐ€ ์ด๋™ ๊ฐ€๋Šฅํ•œ ๊ฐ’(1)์ด๋‹ค.) { 
        1. ํ์— ์ด๋™ ๊ฐ€๋Šฅํ•œ ์œ„์น˜๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
        2. ์ด ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
        3. ๋ฐฉ๋ฌธํ•œ ์ขŒํ‘œ๋ฅผ true๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
    }
}

๋‚ด๋ถ€ if๋ฌธ์—์„œ ์ด ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” 2๋ฒˆ์ด ํ•ต์‹ฌ์ด๋‹ค.

์ด ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ณด๋“œ์˜ ๋‹ค์Œ ์œ„์น˜์— ํ˜„์žฌ ์œ„์น˜๊ฐ’ + 1์„ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

ํ˜„์žฌ ์œ„์น˜๊ฐ’์€ ์ด๋™์„ ํ•˜๋ฉด์„œ ํ•ญ์ƒ ๊ฐฑ์‹ ์ด ๋˜๋ฏ€๋กœ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

๐ŸŸ  ์ฝ”๋“œ

//https://www.acmicpc.net/problem/2178
import Foundation

struct b2178 {
    static func run() {
        // Input ์ฒ˜๋ฆฌ
        let input = readLine()!.components(separatedBy: " ").map { Int($0)! }
        var board = [[Int]](repeating: [], count: input[0])
        
        for i in 0..<input[0] {
            let v = readLine()!.map { Int("\($0)")! }
            board[i].append(contentsOf: v)
        }
//        print(board)
        
        // ์ƒํ™”์ขŒ์šฐ ์„ธํŒ…
        let dx = [-1, 1, 0, 0]
        let dy = [0, 0, -1, 1]
        
        var queue = [[0,0]] // ํ
        var visited = [[Bool]](repeating: [Bool](repeating: false, count: input[1]), count: input[0]) // ๋ฐฉ๋ฌธํ–ˆ๋Š”์ง€ ํ™•์ธ
        
        var nx = 0
        var ny = 0
        
        // ์‹œ์ž‘์ขŒํ‘œ ์„ธํŒ…
        var x = queue[0][0]
        var y = queue[0][1]
        visited[0][0] = true
        
        while !queue.isEmpty {
            x = queue[0][0]
            y = queue[0][1]
            
            queue.removeFirst() // append๋กœ ๋„ฃ์„ ๊ฒƒ์ด๋ผ์„œ FIFO ์ ์šฉ
            
            for i in 0..<4 {
                // ์ด๋™ ๊ฐ€๋Šฅํ•œ ์ขŒํ‘œ ๊ณ„์‚ฐ
                nx = x + dx[i]
                ny = y + dy[i]
                
                // ์ขŒํ‘œ๊ฐ€ board์˜ ์ขŒํ‘œ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์œผ๋ฉด
                if nx >= 0 && ny >= 0 && nx < input[0] && ny < input[1] && visited[nx][ny] == false {
                    if board[nx][ny] == 1 {
                        queue.append([nx, ny])
                        board[nx][ny] = board[x][y] + 1 // ์ด ์ด๋™๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ
                        visited[nx][ny] = true // ๋ฐฉ๋ฌธํ•œ ๊ณณ์€ true๋กœ ๋ณ€๊ฒฝ
//                        print("-> \(queue) \n -> \(board)")
                    }
                }
            }
        }
        print(board[input[0]-1][input[1]-1])
    }
}
Comments