Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[Swift] BOJ 7576 ํ† ๋งˆํ†  ๋ณธ๋ฌธ

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

[Swift] BOJ 7576 ํ† ๋งˆํ† 

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 4. 3. 20:51

BOJ 7576 ํ† ๋งˆํ† 

 

โœ… ํ† ๋งˆํ†  ๋ฌธ์ œ๋Š” ์กฐ๊ธˆ ๋” ์ƒ๊ฐํ•ด์•ผ ํ–ˆ์œผ๋‚˜ ๊ทธ๋ž˜๋„ ์–ด๋ ต์ง€๋Š” ์•Š์•˜๋‹ค.

๋‹ค๋งŒ, ์‹œ๊ฐ„์ดˆ๊ณผ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ด์„œ ๊ตฌ๊ธ€๋ง์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ดํ•ด๋„ ํ™•์‹คํžˆ ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋Š๋‚€ ์‹œ๊ฐ„์ด์—ˆ๋‹ค.

 

 

โœ… ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๊ณ  ๋‚˜๋ฆ„ ๊ฐœ์„ ํ•œ์ฝ”๋“œ

queue์—์„œ removeFirst()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด O(N)์ด ๊ฑธ๋ฆฌ๋‹ˆ index๋กœ ์ฐธ์กฐํ•˜๊ฒŒ๋” ์ˆ˜์ •

๊ทธ๋Ÿฌ๋‚˜ ์‹œ๊ฐ„์ดˆ๊ณผ๋Š” ์—ฌ์ „ํžˆ ๋˜‘๊ฐ™์•˜๋‹ค.

let n = readLine()!.components(separatedBy: " ").map { Int("\($0)")! }
        
        var matrix = [[Int]](repeating: [Int](repeating: 0, count: n[0]), count: n[1])
        var visited = [[Bool]](repeating: [Bool](repeating: false, count: n[0]), count: n[1])
        var startIndexList = [[Int]]()
        
        for i in 0..<n[1] {
            let v = readLine()!.components(separatedBy: " ").map { Int("\($0)")! }
            for j in 0..<v.count {
                if v[j] == 1 {
                    startIndexList.append([i,j])
                }
            }
            matrix[i] = v
        }
        
        //        print(matrix)
        //        print(startIndexList)
        
        // ์ž๊ธฐ์ž๋ฆฌ + ์ƒํ•˜์ขŒ์šฐ
        let dx = [-1, 1, 0, 0]
        let dy = [0, 0, -1, 1]
        
        // ์—ฌ๋Ÿฌ๊ฐœ์˜ ํฌ์ธํŠธ๊ฐ€ ๋ฏธ๋กœ์ฐพ๊ธฐ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.
        
        var queue = startIndexList
        visited[queue[0][0]][queue[0][1]] = true
        //        print("queue \(queue)")
        
        var maxValue = 0
        var queueIndex = 0 // ์‹œ๊ฐ„๋ณต์žก๋„ ๊ฐœ์„ ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
        
        while queue.count > queueIndex {
//            print("queue.count \(queue.count) \(queueIndex)")
            let x = queue[queueIndex][0]
            let y = queue[queueIndex][1]
            
            queueIndex += 1
            
            for i in 0..<4 {
                // ์ด๋™ ๊ฐ€๋Šฅํ•œ ์ขŒํ‘œ ๊ณ„์‚ฐ
                let nx = x + dx[i]
                let ny = y + dy[i]
                
                // ์ขŒํ‘œ๊ฐ€ board์˜ ์ขŒํ‘œ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์œผ๋ฉด
                if nx >= 0 && ny >= 0 && nx < n[1] && ny < n[0] && visited[nx][ny] == false {
                    if matrix[nx][ny] == 0 {
                        queue.append([nx, ny])
                        matrix[nx][ny] = matrix[x][y] + 1 // ์ด ์ด๋™๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ
                        maxValue = matrix[nx][ny]
                        visited[nx][ny] = true // ๋ฐฉ๋ฌธํ•œ ๊ณณ์€ true๋กœ ๋ณ€๊ฒฝ
                    }
                }
            }
        }
//                print(matrix)
//        var value = 0
        var option = false
        
        for list in matrix {
            if list.contains(0) {
//                print("list \(list)")
                option = true
                break
            }
        }
        
        if !option {
            print(maxValue-1)
        } else {
            print("-1")
        }

 

 

โœ… ๊ฐœ์„ ํ•œ์ฝ”๋“œ

์ ์–ด๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ‹€๋ฆฌ์ง€ ์•Š์€๊ฑฐ ํ™•์‹คํ–ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋”ฑ ๋ณด์•˜์„ ๋•Œ, ์ด์ „์— ํ’€์—ˆ๋˜ ๋ฏธ๋กœ ํƒ์ƒ‰๊ณผ ๋น„์Šทํ•˜์˜€๊ณ , queue์˜ read & write๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„์˜ ์ด๋“์„ ๊ฐ€์ ธ๊ฐ”๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€ ๊ธฐํšŒ์กฐ์ฐจ ์—†์–ด์„œ ๋‹ค๋ฅธ ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚ด ์ฝ”๋“œ๋กœ (์ž…๋ ฅ๋ถ€, ๊ตฌํ˜„๋ถ€, ์ถœ๋ ฅ๋ถ€)๋กœ ์ „ํ™˜ํ•˜๋ฉด์„œ ์‹œ๋„ํ•ด ๋ณด์•˜๋‹ค.

 

์ด ๋ฌธ์ œ์˜ ํ•ด๋ฒ•์€ ์—„์ฒญ ๊ฐ„๋‹จํ•œ๋ฐ, ๋ฏธ๋กœ ํƒ์ƒ‰ ๋ฌธ์ œ์—์„œ ์ฒ˜์Œ์— input์„ ๋ฐ›์„ ๋•Œ ์‹œ์ž‘์ ์„ ์—ฌ๋Ÿฌ๊ฐœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ทธ ์‹œ์ž‘์ ๋“ค์„ ๊ทธ๋ƒฅ queue์— ์ฒ˜์Œ์— ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด BFS์— ์˜ํ•ด์„œ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ณต๊ฐ„์„ ์ญ‰์ญ‰ ์ฑ„์›Œ๋‚˜๊ฐ€๋Š”๋ฐ, ์ด์ „ ๊ฐ’์˜ ์œ„์น˜์—์„œ ์–ด์ฐจํ”ผ value๋ฅผ 1๋”ํ•˜๋ฏ€๋กœ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋นจ๊ฐ„ ๊ธ€์”จ๊ฐ€ ์ œ์ผ ํ•ต์‹ฌ์ด๋‹ˆ๊นŒ, ์กฐ๊ธˆ ๋” ์„ค๋ช…์„ ๋ง๋ถ™์ด์ž๋ฉด

6 4
1 -1 0 0 0 0
0 -1 0 0 0 0
0 0 0 0 -1 0
0 0 0 0 -1 1

์œ„๋Š” ๋ฐฑ์ค€์˜ ๊ธฐ๋ณธ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์ด๋‹ค.

์ดˆ๊ธฐ ํ์—๋Š” [(0,0), (3,5)]๊ฐ€ ์ €์žฅ๋œ๋‹ค.๊ทธ๋ƒฅ ๋ฏธ๋กœ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๊ฐ’์ด ํ์—์„œ ๊บผ๋‚ด๊ณ  ๋‹ค์Œ ์œ„์น˜๋“ค์˜ ๊ฐ’์ด 0์ด ์žˆ์œผ๋ฉด ๊ทธ ์œ„์น˜๋Š” ํ์—์„œ ๊บผ๋‚ธ ๊ฐ’์˜ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๊ฐ’์—์„œ 1์„ ๋”ํ•˜๋ฉด ๋œ๋‹ค.์ฒ˜์Œ์—๋Š” (0,0)์„ ๊บผ๋‚ด๊ณ  (0,1) ์ž๋ฆฌ๋งŒ ๊ฐ’์ด 2๋กœ ๋ฐ”๋€๋‹ค. ๊ทธ๋ฆฌ๊ณ  (0,1)์„ queue์— ์‚ฝ์ž…ํ•œ๋‹ค.

6 4
1 -1 0 0 0 0
2 -1 0 0 0 0
0 0 0 0 -1 0
0 0 0 0 -1 1

์ฒ˜์Œ ์ˆ˜ํ–‰ํ•˜๋ฉด ์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋˜๊ณ  queue์—๋Š” [(3,5), (0,1)]์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.

๋‹ค์‹œ ํ์—์„œ ๋ฝ‘์•„์„œ ๋ฏธ๋กœ ํƒ์ƒ‰๊ณผ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰ํ•˜๋ฉด,

6 4
1 -1 0 0 0 0
2 -1 0 0 0 0
0 0 0 0 -1 2
0 0 0 0 -1 1

์œ„์™€ ๊ฐ™์ด ๋˜๊ณ , queue์—๋Š” [(0,1), (2,4)]๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด๋ ‡๊ฒŒ ์ญ‰์ญ‰ํ•˜๋‹ค๊ฐ€ ์–ด๋””์„ ๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋งŒ๋‚˜๊ฒ ์ง€?

๊ทผ๋ฐ ์–ด์ฐจํ”ผ 0์ด ์•„๋‹ˆ๋ฉด ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ์–ด๋Š ์ง€์ ์—์„œ ์ƒํ•˜์ขŒ์šฐ ๋‹ค ์ด๋™ํ•  ์ˆ˜ ์—†์–ด์ง€๊ณ  queue๋ฅผ ๋‹ค ์†Œ๋น„ํ•˜๊ณ  ๋๋‚˜๊ฒŒ ๋œ๋‹ค.

 

๋“ค์–ด ์žˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•˜์˜€๋Š”๋ฐ, ์ด ๊ฒฝ์šฐ์—๋„ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ์—๋Š” O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์†ํ•ด๋ณด๊ฒŒ ๋˜์–ด์„œ ๋‚˜๋Š” ์ด ๋ถ€๋ถ„์„ queue์˜ index๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

 

โœ… ์ฝ”๋“œ

์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•ด ๋ณธ ๊ฒฐ๊ณผ

 * ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚œ ๋ถ€๋ถ„ : ์ž…๋ ฅ๋ถ€ ์ž…๋ ฅ๋ถ€๋ฅผ ์•„๋ž˜ ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋‹ˆ๊นŒ ํ•ด๊ฒฐ๋˜์—ˆ์Œ.๋‹ค๋งŒ, ๊ธฐ์กด ๋‚ด ์ฝ”๋“œ์™€ ์–ด๋–ค ๋ถ€๋ถ„์—์„œ ์‹œ๊ฐ„๋ณต์žก๋„์—์„œ ํฌ๊ฒŒ ์†ํ•ด๋ฅผ ๋ณด์•˜๋Š”์ง€๋Š” ๋„์ €ํžˆ ๋ชจ๋ฅด๊ฒ ์Œ .. 

ํ˜น์‹œ๋ผ๋„ ๋ˆ„๊ตฐ๊ฐ€ ์ด ๊ธ€์„ ๋ณด๊ณ  ์•„์‹œ๋Š” ๋ถ„ ์žˆ์œผ์‹œ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š” ใ… ใ… 

 

 

๋‚˜๋Š” ์‹œ๊ฐ„ ๋‹จ์ถ•์„ ํ•˜๊ฒ ๋‹ค๊ณ  visited๋ฅผ ์‚ฌ์šฉ ํ–ˆ์—ˆ๋Š”๋ฐ, ์—†์–ด๋„ ๋” ๋น ๋ฅด๋‹ค๋‹ˆ

 

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

struct b7576 {
    static func run() {
        let nums = readLine()!.split(separator: " ").map { Int($0)! }
        let m = nums[0], n = nums[1]
        
        var matrix = [[Int]]()
        var queue = [(Int, Int)]()
        
        for i in 0..<n {
            let values = readLine()!.split(separator: " ").map { Int($0)! }
            queue.append(contentsOf: values.enumerated().filter({ 1 == $0.element }).map { (i,$0.offset) }) // ๊ฐ’์ด 1์ธ indexes
            matrix.append(values)
        }
        //print(matrix)
        
        // ์ž๊ธฐ์ž๋ฆฌ + ์ƒํ•˜์ขŒ์šฐ
        let dx = [-1, 1, 0, 0]
        let dy = [0, 0, -1, 1]
        
        // ์—ฌ๋Ÿฌ๊ฐœ์˜ ํฌ์ธํŠธ๊ฐ€ ๋ฏธ๋กœ์ฐพ๊ธฐ๋ฅผ ํ•ด์•ผํ•œ๋‹ค.
        
        var maxValue = 0
        var queueIndex = 0 // ์‹œ๊ฐ„๋ณต์žก๋„ ๊ฐœ์„ ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
        
        while queue.count > queueIndex {
            let x = queue[queueIndex].0
            let y = queue[queueIndex].1
            
            queueIndex += 1
            
            for i in 0..<4 {
                // ์ด๋™ ๊ฐ€๋Šฅํ•œ ์ขŒํ‘œ ๊ณ„์‚ฐ
                let nx = x + dx[i]
                let ny = y + dy[i]
                
                // ์ขŒํ‘œ๊ฐ€ board์˜ ์ขŒํ‘œ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š์œผ๋ฉด
                if nx >= 0 && ny >= 0 && nx < n && ny < m {
                    if matrix[nx][ny] == 0 {
                        queue.append((nx, ny))
                        matrix[nx][ny] = matrix[x][y] + 1 // ์ด ์ด๋™๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ
                    }
                }
            }
        }
        
        let flatvisited = matrix.flatMap { $0 }
        maxValue = flatvisited.max() ?? 1
        
        if flatvisited.contains(0) {
            print("-1")
        } else if maxValue == 1 {
            print("0")
        } else {
            print(maxValue - 1)
        }
    }
}

 

 

 

 

 

(์ฐธ๊ณ )

2022.04.02 - [์ฝ”๋”ฉํ…Œ์ŠคํŠธ] - [Swift] BOJ 2178 ๋ฏธ๋กœ ํƒ์ƒ‰

 

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

BOJ 2178 ๋ฏธ๋กœ ํƒ์ƒ‰ โœ… BFS ๋ฌธ์ œ์˜€๋‹ค. DFS์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๊นŠ๊ฒŒ ํƒ์ƒ‰ํ•˜์—ฌ ๊ทธ ๋…ธ๋“œ๊ฐ€ ์ตœ์„ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ๊ธฐํšŒ๋น„์šฉ์ด ๋” ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋™๋นˆ ์ฑ…์—์„œ๋„ DFS๋ณด๋‹ค BFS๊ฐ€ ์ผ๋ฐ˜์ ์ธ ์ฝ”๋”ฉํ…Œ์Šค

rldd.tistory.com

 

 

https://yurimac.tistory.com/48

 

์•Œ๊ณ ๋ฆฌ์ฆ˜) ๋ฐฑ์ค€ 7569๋ฒˆ ํ† ๋งˆํ†  Swift

https://www.acmicpc.net/problem/7569 7569๋ฒˆ: ํ† ๋งˆํ†  ์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N๊ณผ ์Œ“์•„์˜ฌ๋ ค์ง€๋Š” ์ƒ์ž์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” H๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜

yurimac.tistory.com

 

Comments