Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1743๋ฒˆ - ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ (DFS)

๊ฐ์ž ๐Ÿฅ” 2023. 2. 27. 16:48
๋ฐ˜์‘ํ˜•

๐Ÿ’ฌ ์žก๋‹ด๋ถ€ํ„ฐ start

์–ด์ œ ์นœ๊ตฌ์™€ ๊นŠ์€ dfs ์™€ bfs์— ๋Œ€ํ•ด์„œ ๊ณ ์ฐฐํ•ด๋ณธ ๋’ค, ์ฒซ ๋ฌธ์ œํ’€์ด๋‹ค. dfs/bfs๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๊ทธ๋ž˜๋„ ... 50๊ฐœ์ •๋„... ๋Š” ํ’€์—ˆ๋‚˜..? ๊ทธ ์ด์ƒ์ธ๊ฐ€.. ์–ด์จŒ๋“  ๊ทธ์ •๋„ ํ‘ธ๋‹ˆ๊นŒ ๋ฌธ์ œ ์œ ํ˜•์€ ๋Œ€์• ์• ์ถฉ ํŒŒ์•…ํ–ˆ๊ณ .. ์ด์ œ ์ด๊ฒŒ ์ •๋ง BFS์ธ์ง€ DFS์ธ์ง€ ๋จธ๋ฆฌ๋ฅผ ๊ตด๋ฆฌ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค. (์›๋ž˜์˜€์œผ๋ฉด ๋Œ€์ถฉ ๊ทธ๋ƒ ์™„ํƒ=bfs์ง€! ๋ผ๋Š” ๋ฐ”๋ณด๊ฐ™์€ ์†Œ๋ฆฌ๋ฅผ ์ ์–ด๋‚ด๋ ค๊ฐ€๊ณ  ์žˆ๊ฒ ์ง€. ๋•กํ,,,๋งˆ์ดํ”„๋žœ๋“œ) ์•„๋ž˜๋Š” ๋‚ด๊ฐ€ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์ž˜๋ชป ์งš๊ณ  ๋„˜์–ด๊ฐ”๋˜ BFS์™€ DFS์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

https://didu-story.tistory.com/422

 

[์•Œ๊ณ ๋ฆฌ์ฆ˜] 2023.02.25 DFS์™€ BFS์— ๋Œ€ํ•œ ๊ณ ์ฐฐ

โšซ๏ธ ์ž˜๋ชป๋œ ๋ฐฉํ–ฅ ์š”์ฆ˜ BFS์™€ DFS ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์žˆ๋‹ค. ๋น„๊ต์  ์ตœ๊ทผ์— ํ’€์—ˆ๋˜ ๋ฌธ์ œ์ค‘ 'ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ํƒ€๊ฒŸ๋„˜๋ฒ„'๋ฅผ ํ’€๋ฉด์„œ ํ’€์ด๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๋‚ด๊ฐ€ ๊ณ ๋ฏผํ•ด์˜จ ๊ณผ์ •์„ ๋ธ”๋กœ๊ทธ์— ๋‚จ๊ฒผ๋Š”๋ฐ ์ด ๊ธ€์„ ๋ณธ ์นœ๊ตฌ

didu-story.tistory.com

์ด๋Ÿฌํ•œ ์‹œ๊ฐ„์„ ๊ฐ–๊ณ  ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•˜๋‹ˆ DFS๊ฐ€ ๋ญ”์ง€, BFS๊ฐ€ ๋ญ”์ง€ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์—ญ์‹œ, ๊ฐœ๋…๋งŒ ๋ณด๊ณ  ๋ฌดํ„ฑ๋Œ€๊ณ  ์•„๋ฌด๊ฑฐ๋‚˜ ๊ตฌํ˜„ํ–ˆ๋˜ ๋ถˆ๊ณผ 1์ฃผ์ผ์ „์˜ ๋‚˜์™€๋Š” ์กฐ๊ธˆ ๋‹ฌ๋ผ์กŒ๋‹ค. ๋ฟŒ--๋“ฏ,, ํ•˜๋‹ฌ๊นŒ ^__ ^ ๋ญ์–ด์จŒ๋“ ,, ๋ฌธ์ œํ’€์ด ใ„ฑ

โšซ๏ธ ๋ฌธ์ œ

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

 

1743๋ฒˆ: ์Œ์‹๋ฌผ ํ”ผํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ํ†ต๋กœ์˜ ์„ธ๋กœ ๊ธธ์ด N(1 ≤ N ≤ 100)๊ณผ ๊ฐ€๋กœ ๊ธธ์ด M(1 ≤ M ≤ 100) ๊ทธ๋ฆฌ๊ณ  ์Œ์‹๋ฌผ ์“ฐ๋ ˆ๊ธฐ์˜ ๊ฐœ์ˆ˜ K(1 ≤ K ≤ N×M)์ด ์ฃผ์–ด์ง„๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ K๊ฐœ์˜ ์ค„์— ์Œ์‹๋ฌผ์ด ๋–จ์–ด์ง„ ์ขŒํ‘œ (r, c)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค

www.acmicpc.net

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

์ด๋ฌธ์ œ๋Š” DFS๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฒ˜์Œ์— ์ƒ๊ฐํ•œ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

dfs๋ฅผ ์ด์šฉํ•ด์„œ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์ค‘ ์ œ์ผ ๊นŠ์€๊ณณ๊นŒ์ง€ ํƒ์ƒ‰ ํ•˜๊ณ  cnt๋ฅผ ๊ฐฑ์‹ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.
์—ฌ๊ธฐ์—๋Š” visited ๋ณ€์ˆ˜๋„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด๋†จ๊ณ , cnt๋ฅผ answer์ด๋ผ๋Š” ๋ฐฐ์—ด์— ๋„ฃ์–ด ๊ทธ์ค‘์—์„œ max๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์œผ๋กœ ๊ทธ๋ฆผ์„ ๊ทธ๋ ธ์ง€๋งŒ, ์‹ค์ œ ์ฝ”๋“œ๋ฅผ์ž‘์„ฑํ• ๋•Œ๋Š” ํ๋ฆ„์€ ๊ฐ™์ง€๋งŒ ์กฐ๊ธˆ ๋ณ€ํ˜•๋˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

๊ตณ์ด visited ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ณ , ์• ์ดˆ์— ์ž…๋ ฅ๋˜๋Š” arr๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ž…๋ ฅ์„ ๋ฐ›์„๋•Œ ์Œ์“ฐ๊ฐ€ ์žˆ๋Š” ๊ณณ์—๋Š” -1์„ ๋„ฃ์–ด์ฃผ์—ˆ๊ณ , dfs๋ฅผ ๋Œ๋ฆฌ๋ฉด์„œ ์Œ์“ฐ์˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ์–ด์ค„๋•Œ +1์”ฉํ•ด์„œ 1, 2,3,4, ์ด๋Ÿฐ์‹์œผ๋กœ ์ˆ˜๋ฅผ ์ฑ„์›Œ์ฃผ์—ˆ๋‹ค. 

๊ฒฐ๊ณผ๋Š” ์ด๋ ‡๊ฒŒ ๋œ๋‹ค. ์Œ์“ฐ๊ฐ€ ์‹œ์ž‘ํ• ๋–„๋Š” 1๋กœ ์‹œ์ž‘ํ•œ๋‹ค. arr[0][0]์ž๋ฆฌ์— ์žˆ๋Š” ์Œ์“ฐ๋Š” ๋ฉ๊ทธ๋Ÿฌ๋‹ˆ ๋†“์—ฌ์žˆ๋Š” ํ•œ๊ฐœ์งœ๋ฆฌ ์Œ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— 1๋กœ๋งŒ ์ž…๋ ฅ๋˜์—ˆ๊ณ , ๋’ค์— ๋ณด๋ฉด 4๊ฐœ์งœ๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์Œ์“ฐ์—๋Š” 1,2,3,4 ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅ๋˜์–ด์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ํฐ max 4๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

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

import Foundation

let nmk = readLine()!.split(separator: " ").map { Int($0)! }
var arr = Array(repeating: Array(repeating: 0, count: nmk[1]), count: nmk[0])
var answer = -9999
var cnt = 0

// MARK: - ๋ฐฉํ–ฅํ‚ค ์ƒํ•˜์ขŒ์šฐ
let dx = [-1, 1, 0, 0]
let dy = [0, 0, -1, 1]

// MARK: - ์Œ์“ฐ ์žˆ์œผ๋ฉด -1, ์—†์œผ๋ฉด 0
for _ in 0..<nmk[2] {
    let rc = readLine()!.split(separator: " ").map{ Int($0)! }
    arr[rc[0]-1][rc[1]-1] = -1
}

private func dfs(x: Int, y: Int) {
    cnt += 1
    arr[x][y] = cnt

    for i in 0..<4 {
        let nx = x + dx[i]
        let ny = y + dy[i]

        if nx < 0 || ny < 0 || nx >= nmk[0] || ny >= nmk[1] {
            continue
        }

        if arr[nx][ny] == -1 {
            arr[nx][ny] = cnt
            dfs(x: nx, y: ny)
        }
    }
}

for i in 0..<nmk[0] {
    for j in 0..<nmk[1] {
        if arr[i][j] == -1 {
            cnt = 0
            dfs(x: i, y: j)
        }

        if answer < arr[i][j] {
            answer = arr[i][j]
        }
    }
}

print(answer)

 

์ ์  ๊ฐœ๋…์ด ์žกํ˜€๊ฐ€๋ฉด์„œ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ๋“ค์„ ๋ณด๋‹ˆ๊นŒ ๊ธฐ๋ถ„์ด ์ข‹๊ณ  ์žฌ๋ฐŒ๋‹ค! ๋ฌผ๋ก  ์ด ๋ฌธ์ œ๋Š” DFS์—์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š” ๋ฌธ์ œ์ด๊ธฐ์—.. ์•„์ง ์žฌ๋ฐŒ์–ดํ•˜๊ณ  ๊ธฐ์˜๊ธด ์ด๋ฅด์ง€๋งŒ,,, ๊ทธ๋ž˜๋„ ๊ธฐ๋ถ„์ด ์ข‹์€๊ฑธ ์–ด๋–กํ•ด 

๋ฐ˜์‘ํ˜•