Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 4963๋ฒˆ - ์„ฌ์˜ ๊ฐœ์ˆ˜ (DFS, ์žฌ๊ท€)

๊ฐ์ž ๐Ÿฅ” 2023. 2. 22. 21:21
๋ฐ˜์‘ํ˜•

โšซ๏ธ ๋ฌธ์ œ

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

 

4963๋ฒˆ: ์„ฌ์˜ ๊ฐœ์ˆ˜

์ž…๋ ฅ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ์ฒซ์งธ ์ค„์—๋Š” ์ง€๋„์˜ ๋„ˆ๋น„ w์™€ ๋†’์ด h๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. w์™€ h๋Š” 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์–‘์˜ ์ •์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ h๊ฐœ ์ค„์—๋Š” ์ง€๋„

www.acmicpc.net

 

โšซ๏ธ ๋‚˜์˜ ํ’€์ด

์•„๋‹ˆ ์ด๊ฒƒ์€,,, ๋‚ด๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์ „์— ๋ฐ”๋กœ ์ •๋ฆฌํ–ˆ๋˜ '์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค๋จน๊ธฐ' ์˜ˆ์ œ์™€ ๊ฐ™์€ ๋ฌธ์ œ๋‹ค.

https://github.com/HotCodeBreakers/CodingTest/discussions/25

 

[๊ฐœ๋…์ •๋ฆฌ] DFS+BFS (ํ˜น์‹œ,,, ๋ฌธ์ œํ’€์ด ์ „์— ์ด์ฝ”ํ…Œ ์ฑ…์„ ๋ณด์‹œ๋‚˜์š”!?) · Discussion #25 · HotCodeBreakers/Codi

์•ˆ๋…•ํ•˜์„ธ์š” ํ•ซ์ฝ”๋”๋ถ„๋“ค, ์งˆ๋ฌธ์ด ํ•˜๋‚˜ ์žˆ๋Š”๋ฐ์š”! ๋ชจ๋‘ ๋ฌธ์ œํ’€๊ธฐ ์ „์— ์ด์ฝ”ํ…Œ์ฑ…์— ์žˆ๋Š” ์˜ˆ์ œ๋ฅผ ๋ณด์‹œ๋‚˜์š”? ์ €๋Š” ๊ทธ๋ƒฅ ๋ฌดํ„ฑ๋Œ€๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์‹œ์ž‘ํ•˜๋Š”๋ฐ์š” ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์ด๋ฒˆ์— ์˜ฌ๋ผ์˜จ ๋ฌธ์ œ๋ฅผ ๋ณด๋‹ˆ

github.com

์—ฌ๊ธฐ ๋งํฌ ๋“ค์–ด๊ฐ€๋ฉด, ๋งจ ์•„๋ž˜ ๋ถ€๋ถ„์— ์žˆ๋Š” [์ด์ฝ”ํ…Œ ์˜ˆ์ œ - 1๏ธโƒฃ๋ฒˆ] ๊ณผ ๋™์ผํ•˜๋‹ค๋Š” ๊ฒƒ! ๊ทธ๋ž˜์„œ ํ’€์ด๊ณผ์ •์„ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์จ๋‚ด๋ ค๊ฐ”๋‹ค.

  • ์—ฐ๊ฒฐ๋œ ๋ถ€๋ถ„์ด ๋ช‡๊ฐœ์ธ์ง€ ์„ธ์–ด์ฃผ๋Š” ๊ฒƒ์ด๊ณ , ์ƒํ•˜์ขŒ์šฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์˜ค๋ฅธ์ชฝ์œ„์•„๋ž˜์™€ ์™ผ์ชฝ์œ„์•„๋ž˜๋„ ๋ฐฉ๋ฌธํ•ด์ฃผ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฉํ–ฅํ‚ค๋ฅผ 8๊ฐœ๋กœ ์ถ”๊ฐ€ํ–ˆ๋‹ค.
  • ๋ชจ๋“  ์นธ์„ ํƒ์ƒ‰ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ค‘ for๋ฌธ์„ ์ด์šฉํ•ด์„œ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋“ค๋Ÿฌ์ค„ ๊ฒƒ์ด๋‹ค.
  • DFS๋Š” ์ผ๋‹จ, 1์ด๊ธฐ๋งŒ ํ•˜๋ฉด ์„ฌ์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด ๋˜๋ฏ€๋กœ, if๋ฌธ์„ ๋“ค์–ด๊ฐ€๊ธฐ๋งŒ ํ•˜๋ฉด true๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ํ•ด์„œ result์— ๊ฐ’์„ ๋”ํ•ด์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑํ•˜๋ฉด ๋œ๋‹ค.
  • DFS ๋‚ด๋ถ€์—์„œ๋Š” for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ 8๊ฐœ์˜ ๋ฐฉํ–ฅ ๋ชจ๋‘ ์‚ดํŽด๋ด์ค€๋’ค, ์ธ์ ‘ํ•œ ๋ถ€๋ถ„๋“ค๋„ dfs ํ•จ์ˆ˜์— ๋„ฃ์–ด์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค~ ๊ทธ๋Ÿผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋ถ€๋ถ„์ด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋ฉด์„œ ํ•˜๋‚˜์˜ ์„ฌ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ

 

โšซ๏ธ ์ •๋‹ต์ฝ”๋“œ

import Foundation

// ์ƒํ•˜์ขŒ์šฐ ์™ผ์ชฝ์œ„ ์™ผ์ชฝ์•„๋ž˜ ์˜ค๋ฅธ์ชฝ์œ„ ์˜ค๋ฅธ์ชฝ์•„๋ž˜
let dx = [-1, 1, 0, 0, -1, 1, -1, 1]
let dy = [0, 0, -1, 1, -1, -1, 1, 1]

while true {
    let wh = readLine()!.split(separator: " ").map{ Int($0)! }

    if wh == [0, 0] {
        break
    }

    var islandMap = [[Int]]()
    for _ in 0..<wh[1] {
        islandMap.append(readLine()!.split(separator: " ").map{ Int($0)! })
    }

    // MARK: - DFS ํ•จ์ˆ˜
    func dfs(x: Int, y: Int) -> Bool {
        if x < 0 || x >= wh[1] || y < 0 || y >= wh[0] {
            return false
        }

        if islandMap[x][y] == 1 {
            islandMap[x][y] = 0
            for i in 0..<8 {
                let nx = x + dx[i]
                let ny = y + dy[i]
                dfs(x: nx, y: ny)
            }
            return true
        }
        return false
    }

    // MARK: - main
    var result = 0
    for i in 0..<wh[1] {
        for j in 0..<wh[0] {
            if dfs(x: i, y: j) {
                result += 1
            }
        }
    }
    print(result)
}

 

๋ฐ˜์‘ํ˜•