๋ฐฑ์ค€ - ๋นต์ง‘(Swift)

2022. 11. 1. 00:30ใ†Algorithm

๋ฐฑ์ค€ - ๋นต์ง‘(Swift)

 

 

 ๋ฌธ์ œ ์„ค๋ช…

 

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

 

3109๋ฒˆ: ๋นต์ง‘

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

www.acmicpc.net

 

 ๋‚˜์˜ ํ’€์ด

 

์ฒซ๋ฒˆ์งธ๋กœ ๊ฐ€์žฅ ์ตœ๋Œ€๋กœ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊นŒ๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ๋””ํ•œ ์ ‘๊ทผ์œผ๋กœ ๋งจ ์œ„๋ถ€ํ„ฐ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด๋‹ค. 

๋งŒ์•ฝ ์˜ค๋ฅธ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์˜ ๊ธธ์ด ์žˆ์„๋•Œ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋ฅผ ์„ ํƒํ•ด์„œ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ˜•์„ฑํ–ˆ๋‹ค๋ฉด ๊ทธ ์•„๋ž˜์˜ ๊ธธ๋“ค์€ ์œ„์ชฝ์ด ๋ง‰ํ˜€์„œ ์„ค์น˜ํ•  ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜ค๋ฅธ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋กœ ์ˆœ์„œ๋Œ€๋กœ ํƒ์ƒ‰ํ•ด์•ผ ํ•œ๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ํ•œ๋ฒˆ ์ง€๋‚˜๊ฐ„ ๊ธธ์€ ๊ฐˆ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์—์„œ ์ผ๋ฐ˜์ ์ธ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹˜์„ ์•Œ์•„์•ผํ•œ๋‹ค.

 

๋ฐฑํŠธ๋ž˜ํ‚น์˜ ์ •์˜๋Š” ํŠน์ •ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ๋งŒ ๊ณ„์†ํ•ด์„œ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰ ๊ฐ€์ง€์น˜๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ์•„๋ž˜ ์ฝ”๋“œ์—์„œ๋Š” ํŠน์ • ์กฐ๊ฑด๊นŒ์ง€ ๋„๋‹ฌํ•˜๊ณ , ํŠน์ • ์กฐ๊ฑด์— ๋„๋‹ฌํ•˜์ง€์•Š์œผ๋ฉด ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ๊ฐ€๋Š”(์˜ค๋ฅธ์ชฝ ์œ„๊ฐ€ ๋ง‰ํ˜€์žˆ๋‹ค๋ฉด ์˜ค๋ฅธ์ชฝ์œผ๋กœ) ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ๋ฐฑํŠธ๋ž˜ํ‚น๊ณผ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ ์ตœ์ข…์œผ๋กœ ์›ํ•˜๋Š” ํŠน์ • ์กฐ๊ฑด์— ๋„๋‹ฌํ–ˆ์„๋•Œ(๋งจ ๋์— ๋„์ฐฉ) ์ด์ „๊ฒƒ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค์‹œ ์ด์–ด์„œ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ์ง€๋‚˜์˜จ ๊ธธ์—์„œ๋Š” ๊ด€์‹ฌ์ด ์—†๋‹ค. ๋ฐ˜๋“œ์‹œ ์ฒ˜์Œ๊ฐ€๋Š” ๊ฒฝ๋กœ์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข… ์กฐ๊ฑด์— ๋„๋‹ฌํ•œ ์ˆœ๊ฐ„ ๋ฐฑํŠธ๋ž˜ํ‚น์„ ํ•˜์ง€์•Š๊ณ  ๋ฐ”๋กœ ๋๋‚ผ ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค. ๊ทธ๋ž˜์„œ dfsํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ์กฐ๊ฑด์— ๋์— ๋„๋‹ฌํ–ˆ๋‹ค๋ฉด true๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋ชจ๋“  ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ข…๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  if dfs(r, c)์ผ๋•Œ true๋ฅผ ์คŒ์œผ๋กœ์จ ๊ทธ ์ดํ›„์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์„๋•Œ๋Š” ๊ทธ ๋‹จ๊ณ„์—์„œ ๋‹ค์‹œ ์˜ค๋ฅธ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ๋” ์„ค๊ณ„๋ฅผ ํ•œ๋‹ค.

 

import Foundation

let input = readLine()!.components(separatedBy:" ").map{Int($0)!}

var map = [[Bool]]()
for _ in 0..<input[0] {
    map.append(readLine()!.map{$0 == "."})
}

func inRange(_ r: Int, _ c: Int) -> Bool {
    return r>=0 && c>=0 && r<input[0] && c<input[1]
}

let dr = [-1, 0, 1]
var result = 0

func dfs(_ r: Int, _ c: Int) -> Bool {
    if c == input[1]-1 {
        return true
    }
    
    for i in 0..<3 {
        let row = r+dr[i]
        let col = c+1
        if inRange(row, col), map[row][col] {
            map[row][col] = false
            
            // ๋งŒ์•ฝ ๋‹ค์Œ ์žฌ๊ท€๋กœ ๋“ค์–ด๊ฐ„ ๊ฒƒ๋“ค์ด ๋ง‰ํžŒ ๊ณณ์ด๋‚˜ ๋ฐฉ๋ฌธํ•œ ๊ณณ์ด ์•„๋‹ˆ๋ผ๋ฉด true๋กœ
            if dfs(row, col) {
                return true
            }
        }
    }
    return false
}

for i in 0..<input[0] {
    if dfs(i, 0) {
        result += 1
    }
}
print(result)