๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ์•„๊ธฐ ์ƒ์–ด BOJ #16236

by seolhee2750 2022. 1. 25.
๋ฌธ์ œ

https://www.acmicpc.net/problem/16236

 

16236๋ฒˆ: ์•„๊ธฐ ์ƒ์–ด

N×N ํฌ๊ธฐ์˜ ๊ณต๊ฐ„์— ๋ฌผ๊ณ ๊ธฐ M๋งˆ๋ฆฌ์™€ ์•„๊ธฐ ์ƒ์–ด 1๋งˆ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ๊ณต๊ฐ„์€ 1×1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ํ•œ ์นธ์—๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์ตœ๋Œ€ 1๋งˆ๋ฆฌ ์กด์žฌํ•œ๋‹ค. ์•„๊ธฐ ์ƒ์–ด์™€ ๋ฌผ๊ณ ๊ธฐ๋Š” ๋ชจ๋‘ ํฌ๊ธฐ๋ฅผ ๊ฐ€

www.acmicpc.net

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
let n = Int(readLine()!)!
var space = [[Int]]() // ์ฃผ์–ด์ง„ ๊ณต๊ฐ„์— ๋Œ€ํ•œ ์ •๋ณด
var fish = [(Int, Int, Int)]() // ๋จนํžŒ ๋ฌผ๊ณ ๊ธฐ์˜ (x ์ขŒํ‘œ, y ์ขŒํ‘œ, ์•„๊ธฐ ์ƒ์–ด์™€์˜ ๊ฑฐ๋ฆฌ)๋“ค์„ ์ €์žฅํ•  ๋ฐฐ์—ด
var shark = (0, 0) // ์ƒ์–ด ์œ„์น˜
var distance = [[Int]]() // ์ฃผ์–ด์ง„ ๊ณต๊ฐ„์˜ ์นธ๋งˆ๋‹ค ์•„๊ธฐ ์ƒ์–ด๊ฐ€ ํ•ด๋‹น ์œ„์น˜๋กœ ์˜ค๋Š”๋ฐ ๊ฑธ๋ฆฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅ
var count = 0 // ์•„๊ธฐ ์ƒ์–ด์˜ ํฌ๊ธฐ ์ฆ๊ฐ€๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ์นด์šดํŠธ ๋ณ€์ˆ˜
var size = 2 // ์•„๊ธฐ ์ƒ์–ด ํฌ๊ธฐ
let dx = [0, 0, -1, 1]
let dy = [-1, 1, 0, 0]
var queue = [(Int, Int)]()
var result = 0

for _ in 0..<n { space.append(readLine()!.split(separator: " ").map({Int(String($0))!})) }

func bfs() {
    var index = 0 // index ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ removeFirst ํ”ผํ•ด์คŒ
    queue.append(shark) // ํ์— ํ˜„์žฌ ์ƒ์–ด ์œ„์น˜ ์ถ”๊ฐ€
    distance[shark.0][shark.1] = 1 // ํ•ด๋‹น ์œ„์น˜๋ฅผ ์ค‘๋ณตํ•ด์„œ ํƒ์ƒ‰ํ•˜์ง€ ์•Š๋„๋ก, ์‹œ์ž‘ ์œ„์น˜์ด์ง€๋งŒ ๊ฑฐ๋ฆฌ๋ฅผ 1๋กœ ์„ค์ •ํ•ด์ฃผ์–ด ์ฐจ๋ณ„ํ™”ํ•ด์ฃผ์—ˆ์Œ
    
    // ๋” ์ด์ƒ ํƒ์ƒ‰ํ•ด์•ผ ํ•  ์ขŒํ‘œ๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    while index < queue.count {
        let (x, y) = queue[index]
        index += 1 // queue์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ํ•œ ์ขŒํ‘œ์˜ ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜์˜€์œผ๋ฏ€๋กœ, index ํ•œ ์นธ ์˜ฎ๊ฒจ์ฃผ๊ธฐ
        
        // ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰์„ ์œ„ํ•ด 4๋ฒˆ ๋ฐ˜๋ณต
        for i in 0..<4 {
            // ํƒ์ƒ‰ํ•  ์ขŒํ‘œ ์„ค์ •
            let nx = x + dx[i]
            let ny = y + dy[i]

            if nx < 0 || ny < 0 || nx >= n || ny >= n || distance[nx][ny] != 0 { continue } // ์˜ˆ์™ธ
            
            // ํƒ์ƒ‰ํ•  ์ž๋ฆฌ์— ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๊ณ , ์•„๊ธฐ ์ƒ์–ด๋ณด๋‹ค ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์„ ๋•Œ (๋ฌผ๊ณ ๊ธฐ ๋จน๊ธฐ์— ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ)
            if space[nx][ny] != 0 && space[nx][ny] < size {
                distance[nx][ny] = distance[x][y] + 1 // [x][y] ์ž๋ฆฌ์—์„œ ํ•œ ์นธ ๋” ์™”์Œ์„ ํ‘œ์‹œ
                fish.append((nx, ny, distance[nx][ny])) // ๋จนํžŒ ๋ฌผ๊ณ ๊ธฐ์˜ ์ขŒํ‘œ์™€ ๊ฑฐ๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฐ ๊ฑฐ๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€
                continue
            }
            
            // ํƒ์ƒ‰ํ•  ์ž๋ฆฌ์— ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†๊ฑฐ๋‚˜, ์•„๊ธฐ์ƒ์–ด์™€ ์‚ฌ์ด์ฆˆ๊ฐ€ ๊ฐ™์„ ๋•Œ (์•„์ง ๋จน์„ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ)
            if space[nx][ny] == 0 || space[nx][ny] == size {
                distance[nx][ny] = distance[x][y] + 1 // [x][y] ์ž๋ฆฌ์—์„œ ํ•œ ์นธ ๋” ์™”์Œ์„ ํ‘œ์‹œ
                queue.append((nx, ny)) // ํƒ์ƒ‰ํ•ด์•ผ ํ•  ์ขŒํ‘œ๋ฅผ ์ถ”๊ฐ€
            }
        }
    }
}

for i in 0..<n {
    for j in 0..<n {
        if space[i][j] == 9 { shark = (i, j); space[i][j] = 0 } // ์•„๊ธฐ ์ƒ์–ด์˜ ์ดˆ๊ธฐ ์œ„์น˜ ์ฐพ๊ณ , ํ•ด๋‹น ์ž๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์ฃผ๊ธฐ
    }
}

while true {
    // bfs ํ•จ์ˆ˜ ๋Œ๋ฆฌ๊ธฐ ์ „ ์ดˆ๊ธฐํ™”
    fish = [(Int, Int, Int)]()
    distance = Array(repeating: Array(repeating: 0, count: n), count: n)
    queue = [(Int, Int)]()
    
    bfs()
    
    if fish.isEmpty { print(result); break } // ์ด๋ฒˆ bfs ํ•จ์ˆ˜ ์‹คํ–‰์—์„œ๋Š” ๋จนํžŒ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†๋‹ค๋Š” ๋œป์œผ๋กœ, result ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ, ์‹คํ–‰ ์ข…๋ฃŒ !
    
    count += 1
    
    // ์•„๊ธฐ ์ƒ์–ด์™€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์งง์•˜๋˜ ๊ฒƒ๋ถ€ํ„ฐ ์˜ค๋ฆ„์ฐจ์ˆœ, x์ขŒํ‘œ๊ฐ€ ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ์˜ค๋ฆ„์ฐจ์ˆœ, y์ขŒํ‘œ๊ฐ€ ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ
    // (์•„๊ธฐ ์ƒ์–ด๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ฌผ๊ณ ๊ธฐ๋ถ€ํ„ฐ ๋จน๊ณ , ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์šด ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋งŽ๋‹ค๋ฉด ๊ฐ€์žฅ ์œ„์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ, ๊ทธ๋Ÿฌํ•œ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—ฌ๋Ÿฌ๋งˆ๋ฆฌ๋ผ๋ฉด ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋Š”๋‹ค๋Š” ์กฐ๊ฑด์— ์˜ํ•จ)
    fish = fish.sorted {
        if $0.2 <= $1.2 {
            if $0.0 == $1.0 { return $0.1 < $1.1 }
            else { return $0.0 < $1.0 }
        }
        else { return false }
    }
    
    space[fish[0].0][fish[0].1] = 0 // ์œ„์—์„œ ์กฐ๊ฑด์— ๋งž๊ฒŒ ๋จนํžŒ ๋ฌผ๊ณ ๊ธฐ๋“ค์„ ์ •๋ ฌํ•˜์˜€์„ ๋•Œ, ๊ฐ€์žฅ ๋จผ์ € ๋จนํžˆ๋Š”๊ฒŒ ๋งž๋Š” ๋ฌผ๊ณ ๊ธฐ์˜ ์ž๋ฆฌ๋ฅผ 0์œผ๋กœ ๋ฐ”๊ฟ”์คŒ
    result += distance[fish[0].0][fish[0].1] - 1 // ํ•ด๋‹น ๋ฌผ๊ณ ๊ธฐ์™€ ์•„๊ธฐ ์ƒ์–ด์™€์˜ ๊ฑฐ๋ฆฌ์—์„œ 1์„ ๋บ€ ๊ฐ’์„ result์— ๋”ํ•ด์คŒ
    
    // ์•„๊ธฐ ์ƒ์–ด์˜ ํฌ๊ธฐ๊ฐ€ count์™€ ๊ฐ™์•„์กŒ์„ ๊ฒฝ์šฐ ์ƒ์–ด ํฌ๊ธฐ ์ฆ๊ฐ€ (์•„๊ธฐ ์ƒ์–ด๋Š” ์ž์‹ ์˜ ํฌ๊ธฐ์™€ ๊ฐ™์€ ์ˆ˜์˜ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์„ ๋•Œ๋งˆ๋‹ค ํฌ๊ธฐ๊ฐ€ 1 ์ฆ๊ฐ€ํ•œ๋‹ค๋Š” ์กฐ๊ฑด์— ์˜ํ•จ)
    if size == count { size += 1; count = 0 }
    
    shark = (fish[0].0, fish[0].1) // ๋จน์€ ๋ฌผ๊ณ ๊ธฐ์˜ ์ž๋ฆฌ๋กœ ์ƒ์–ด ์œ„์น˜ ๋ฐ”๊ฟ”์คŒ
}

๐Ÿ‘‰ bfs, ๊ตฌํ˜„ ๋ฌธ์ œ๋กœ, ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ์ž˜ ์ฝ๊ณ ! ์ •๋ฆฌํ•˜์—ฌ ํ’€์–ด์•ผ ํ•œ๋‹ค.

ํ•œ ๋ฒˆ์˜ bfs ํ•จ์ˆ˜ ์‹คํ–‰ ์‹œ๋งˆ๋‹ค ์–ด๋–ค ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ธ์ง€ ๋”ฐ์ง€๊ณ ,
๋” ์ด์ƒ ๋จน์„ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์— ์‹คํ–‰์„ ์ข…๋ฃŒํ•ด์ฃผ์—ˆ๋‹ค.

 

[ bfs ํ•จ์ˆ˜ ]

  • queue์— ํƒ์ƒ‰ํ•ด์•ผ ํ•  ์œ„์น˜๋“ค์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด์„œ ๋ฐ˜๋ณต์ด ์ง„ํ–‰๋˜๋„๋ก ํ–ˆ๋Š”๋ฐ,
    removeFirst ํ•˜์ง€ ์•Š๊ณ  index ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์˜€๋‹ค.
    ๋”ฐ๋ผ์„œ while์€ ํ์˜ ๊ธธ์ด๊ฐ€ index๋ณด๋‹ค ์งง์•„์ง€๊ธฐ ์ „ ๊นŒ์ง€,
    ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ์ขŒํ‘œ ๊ฐ’์ด ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.
  • distance๋ผ๋Š” 2์ฐจ์› ๋ฐฐ์—ด์€ ์ฃผ์–ด์ง„ n*n ๊ณต๊ฐ„๊ณผ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ์ƒ์„ฑํ•˜๊ณ  0์œผ๋กœ ์ฑ„์›Œ์ฃผ์—ˆ๋Š”๋ฐ,
    ์•„๊ธฐ ์ƒ์–ด๊ฐ€ ํ•ด๋‹น ์ขŒํ‘œ๊นŒ์ง€ ๊ฐ€๋Š”๋ฐ์— ๊ฑธ๋ฆฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ๋ฐฐ์—ด์ด๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ ์ค‘๊ฐ„ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์šฉ if๋ฌธ์„ ๋ณด๋ฉด, distance[nx][ny]๊ฐ€ 0์ด ์•„๋‹ ๊ฒฝ์šฐ๋ฅผ ์˜ˆ์™ธ๋กœ ๋„ฃ์—ˆ๋Š”๋ฐ,
    ์ด๋ ‡๊ฒŒ distance ํ•จ์ˆ˜๋Š” ์ด๋ฏธ ๊ทธ ์ž๋ฆฌ๋ฅผ ์ง€๋‚˜๊ฐ”๋Š”์ง€ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ๋„ ํ•œ๋‹ค.
    ํ•จ์ˆ˜ ์ดˆ๋ฐ˜์—, distance ๋ฐฐ์—ด์˜ ์•„๊ธฐ ์ƒ์–ด์˜ ์ถœ๋ฐœ ์œ„์น˜์— 1์„ ๋„ฃ์€ ๊ฒƒ์€
    ์•„์ง ์‹œ์ž‘ ์œ„์น˜์ด๋ฏ€๋กœ 1๋งŒํผ ์ด๋™ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ด๋ฏธ ์ง€๋‚˜๊ฐ„ ๊ณณ์ž„์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
    ๋”ฐ๋ผ์„œ ๋‚˜์ค‘์— distance ๋ฐฐ์—ด์—์„œ ์ง„์งœ ์ด๋™ํ•œ ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ๋ ค๋ฉด ํ•ด๋‹น ๊ฑฐ๋ฆฌ์—์„œ 1์„ ๋นผ์ค˜์•ผ ํ•œ๋‹ค.
  • while๋ฌธ ์•ˆ์—์„œ๋Š” ์ƒํ•˜์ขŒ์šฐ ํƒ์ƒ‰์„ ์œ„ํ•œ for๋ฌธ์„ ๋Œ๋ ค์ฃผ์—ˆ๋‹ค.
    dx, dy๋ฅผ ์ด์šฉํ•˜์—ฌ nx, ny๋ฅผ ์ฐพ์•„ ํ•ด๋‹น ์ž๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ–ˆ๊ณ ,
    ํ•ด๋‹น ์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง„ ๊ณต๊ฐ„์—์„œ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์ด๋ฏธ ํƒ์ƒ‰ํ–ˆ๋˜ ์ž๋ฆฌ์ผ ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ๋กœ ๋นผ์„œ continue ํ–ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์™ธ์—๋Š”, ํƒ์ƒ‰ํ•  (nx, ny) ์ขŒํ‘œ์— ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์™€ ์—†๋Š” ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆด๋‹ค.
    ๋จน์„ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ ๋ฌผ๊ณ ๊ธฐ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ fish ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•œ ํ›„ continue ํ–ˆ๊ณ ,
    ๋จน์„ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋˜ ๊ทธ ์ž๋ฆฌ์˜ ์ฃผ๋ณ€ ์ž๋ฆฌ๋“ค์„ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ queue์— ์ขŒํ‘œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ํ•œ ์นธ ๋” ์ด๋™ํ–ˆ์œผ๋ฏ€๋กœ, distance ๋ฐฐ์—ด์„ ๊ฐฑ์‹ ํ–ˆ๋‹ค.

=> bfs ํ•จ์ˆ˜์—์„œ๋Š” ํ˜„์žฌ ์•„๊ธฐ ์ƒ์–ด์˜ ์ž…์žฅ์—์„œ ์ตœ์ดˆ๋กœ ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

 

[ ๋ฉ”์ธ ์‹คํ–‰๋ฌธ ]

  • ์•„๊ธฐ ์ƒ์–ด์˜ ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ shark์— ์ €์žฅํ–ˆ๊ณ , ํ•ด๋‹น ์ž๋ฆฌ๋Š” 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.
  • while๋ฌธ์„ ๋ฐ˜๋ณปํ•˜๋ฉฐ ๋จน์„ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐพ์•„์ฃผ๋Š” ์‹์œผ๋กœ ํ’€์ดํ–ˆ๋‹ค.
    while์—์„œ๋Š” ๊ฐ๊ฐ fish, distance, queue๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ค€ ํ›„ bfs๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค.
  • bfs ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚ฌ์„ ๋•Œ fish ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋‹ค๋ฉด
    ๊ณต๊ฐ„์— ๋” ์ด์ƒ ๋จน์„ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์—†์—ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ, result ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ณ  ์‹คํ–‰์„ ์ข…๋ฃŒํ–ˆ๋‹ค.
  • fish ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ
    count๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ํ•˜๋‚˜์˜ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ํ‘œ์‹œํ•ด์ค€๋‹ค.
  • fish ๋ฐฐ์—ด์€ ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ •๋ ฌํ•ด์ค€๋‹ค.
    ์ด๋ฒˆ bfs ์‹คํ–‰์—์„œ ์–ป์€ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ์–ด๋–ค ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์–ด์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
    ์ •๋ ฌ์ด ๋๋‚˜๋ฉด fish ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ์ €์žฅ๋œ ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ๋‹น์ฒจ์ด๋‹ค.
    space์—์„œ ํ•ด๋‹น ๋ฌผ๊ณ ๊ธฐ์˜ ์ž๋ฆฌ๋Š” 0์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , result์— ํ•ด๋‹น ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน๋Š” ๋ฐ ๊ฑธ๋ฆฐ  ๊ฑฐ๋ฆฌ๋ฅผ ๋”ํ–ˆ๋‹ค.
  • ๋งŒ์•ฝ ์•„๊ธฐ ์ƒ์–ด์˜ ํฌ๊ธฐ๊ฐ€ count์™€ ๊ฐ™์•„์กŒ๋‹ค๋ฉด,
    ์ž์‹ ์˜ ํฌ๊ธฐ์™€ ๊ฐ™์€ ์ˆ˜๋งŒํผ ๋ฌผ๊ณ ๊ธฐ๋ฅผ ๋จน์—ˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋ฏ€๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ์—ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” ์•„๊ธฐ ์ƒ์–ด์˜ ์œ„์น˜๋ฅผ ํ•ด๋‹น ๋ฌผ๊ณ ๊ธฐ๊ฐ€ ์žˆ๋˜ ์ž๋ฆฌ๋กœ ์˜ฎ๊ฒจ์ฃผ์–ด
    ์ƒˆ๋กœ์šด ๋ฐ˜๋ณต์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ค€๋น„ํ•œ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ •๋ง ์ •๋ง ์–ด๋ ค์› ๋‹ค.ใ…œ dfs๋Š” ๊ทธ๋‚˜๋งˆ ์ข€ ์ต์ˆ™ํ•ด์ง„ ๊ฒƒ ๊ฐ™์€๋ฐ bfs๋Š” ๊ณ„์† ์–ด์ƒ‰ํ•œ ๋Š๋‚Œ์ด๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ์ด๊ฑด bfs๋ฅผ ๋– ๋‚˜์„œ ์™„์ „ ๋นก๊ตฌํ˜„ ๋ฌธ์ œ๊ฐ™์•„์„œ ๋” ํž˜๋“ค์—ˆ๋‹ค.ใ…Ž
  • ์กฐ๊ฑด๋„ ๋งŽ์•„์„œ ์ฃผ์–ด์ง„ ์กฐ๊ฑด๋“ค์„ ๋ฏธ๋ฆฌ ์ž˜ ์ •๋ฆฌํ•ด์„œ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ™๋‹ค.
  • ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ผญ ํ’€์–ด๋ณด์ž..~!~

 

 

 

๋Œ“๊ธ€