MUKER_DEV with iOS

[swift] ๋ฐฑ์ค€ - 1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ” ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/BAEKJOON

[swift] ๋ฐฑ์ค€ - 1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

MUKER 2023. 3. 3. 00:53
 

1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— 

www.acmicpc.net

๋ฌธ์ œ ํ‘ธ๋Š” ๋ฐ ์žˆ์–ด ๋„์›€์ด ๋˜๋„๋ก ๋‚˜์˜ ํ’€์ด์™€ ๊ฐœ์„ ๋œ ํ’€์ด๋ฅผ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.
๋˜ํ•œ ํ’€์ด ํ›„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์ฐธ๊ณ ํ• ๋งŒํ•œ ํ’€์ด๋„ ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

- ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋‚˜์˜ ํ’€์ด๋งŒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ํ•ด๋‹น ํ’€์ด๋“ค์€ ํ’€์ด ์ค‘ ํ•˜๋‚˜์ผ ๋ฟ ์ตœ์„ ์˜ ํ’€์ด๋Š” ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

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

let input = Int(readLine()!)!
var farm = [[Bool]]() // 1
var visited = [[Bool]]()
let dirX = [1, -1, 0, 0]
let dirY = [0, 0, 1, -1]

func dfs(_ y: Int, _ x: Int) {
    visited[y][x] = true
    for i in 0...3 {
        let newX = x + dirX[i]
        let newY = y + dirY[i]
        if farm[newY][newX] && !visited[newY][newX] {
            dfs(newY, newX)
        }
    }
}

for _ in 0..<input {
    let WHK = readLine()!.split(separator: " ").map { Int($0)! }
    farm = Array(repeating: Array(repeating: false, count: WHK[0]+2), count: WHK[1]+2) // 2
    visited = farm
    var result = 0

    for _ in 0..<WHK[2] {
        let bug = readLine()!.split(separator: " ").map { Int($0)! }
        farm[bug[1]+1][bug[0]+1] = true // 3
    }

    for i in 1...WHK[1] {
        for j in 1...WHK[0] {
            if farm[i][j] && !visited[i][j] {
                dfs(i,j)
                result += 1
            }
        }
    }
    print(result)
}

 

DFS(๊นŠ์ด์šฐ์„ ํƒ์ƒ‰)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘ผ ์ฒซ ๋ฒˆ์งธ ํ’€์ด๋‹ค.

DFS์ž…๋ฌธ์œผ๋กœ ์•„์ฃผ ์ข‹์€ ๊ธฐ๋ณธ๋ฌธ์ œ๋‹ค.

 

ํŽธํ•˜๊ฒŒ ๋˜์งš์–ด ๋ณด๊ธฐ์œ„ํ•ด ์ฃผ์„์„ ๋‹ฌ์•„๋†จ๋‹ค.

์ฃผ์„ ์ˆœ์„œ๋กœ ์„ค๋ช…ํ•ด๋ณผ๋ ค๊ณ  ํ•œ๋‹ค.

 

// 1

ํ˜„์žฌ ํ’€์ด๋Š” ์ •์„์ ์ธ ํ’€์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ

๊ธฐ๋ณธ๋ฐฐ์—ด(farm)๊ณผ ๋ฐฉ๋ฌธ๋ฐฐ์—ด(visited)๋ฅผ ๋‚˜๋ˆ ์„œ ํ‘ธ๋Š” ๊ฑธ ๋งํ•œ๋‹ค.

farm์€ ์šฐ๋ฆฌ๊ฐ€ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ €์žฅํ•˜๊ณ  ์žˆ๊ณ 

visited๋Š” ๋ฐฉ๋ฌธํ•œ ๊ณณ์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

 

์ด ๋ฐฉ๋ฒ• ๋ง๊ณ  ๊ธฐ๋ณธ๋ฐฐ์—ด์—์„œ ๋ฐฉ๋ฌธํ•˜๋Š” ๋กœ์ง์„ ํ•ฉ์ณ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜๋„ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ฒซ๋ฌธ์ œ์ธ๋งŒํผ ์ •์„์œผ๋กœ ๊ธฐ๋ณธ๋ฐฐ์—ด๊ณผ, ๋ฐฉ๋ฌธ๋ฐฐ์—ด ๋‘ ๊ฐœ๋ฅผ ์ดˆ๊ธฐํ™”์‹œ์ผฐ๋‹ค.

 

 

// 2

๋ฐฐ์—ด x ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์— ๋นˆ ๊ณต๊ฐ„์„ ๋‘์—ˆ๊ณ 

y ์œ„์ชฝ, ์•„๋ž˜์ชฝ์—๋„ ๋นˆ ๊ณต๊ฐ„์„ ๋‘์—ˆ๋‹ค.

 

ํƒ์ƒ‰์„ ํ•  ๋•Œ ์ธ๋ฑ์Šค๊ฐ€ ๋„˜์น˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ!

           
  0 0 0 0  
  0 0 0 0  
  0 0 0 0  
  0 0 0 0  
           

์ธ๋ฑ์Šค๊ฐ€ 0์ผ ๋•Œ ์™ผ์ชฝ์œผ๋กœ ๊ฐ„๋‹ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ฒ ์ง€๋งŒ

๋นˆ๊ณต๊ฐ„์„ ๋‘์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ์ธ๋ฑ์Šค๊ฐ€ 1์ด๋‹ค.

๋”ฐ๋ผ์„œ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•œ๋‹ค๊ณ  ํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋‹ค.

 

 

// 3

๋นˆ๊ณต๊ฐ„์„ ์ƒ๊ฐํ•ด์„œ +1์”ฉ ๋”ํ•ด ํ• ๋‹นํ•œ๋‹ค.