์ƒˆ์†Œ์‹

๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜/-- ๋ฐฑ์ค€ (BOJ) - Swift

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

  • -

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

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

๋‚œ์ด๋„ : Silver 1

 

์œ ํ˜• : DFS

 

 

#์ ‘๊ทผ๋ฐฉ์‹ ๋ฐ ์ค‘์š”ํฌ์ธํŠธ

  • Dfs๋ฅผ ๋Œ๋ฉด์„œ ์ƒ,ํ•˜,์ขŒ,์šฐ๋กœ ์Œ์‹๋ฌผ์€ ๋ฐœ๊ฒฌํ•˜๋ฉด, ์นด์šดํŒ…์„ ํ•ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๋ฉด ๊ทธ ๊ฐ’์„ ์ž„์‹œ์ €์žฅํ•ด๋†“๋Š”๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ €์žฅํ•œ ๊ฐ’๋“ค์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ์•„ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

Swift

import Foundation

let input_ = Array(readLine()!.split(separator: " ").map{Int($0)!})
var n = input_[0], m = input_[1], k = input_[2]
var graph = Array(repeating: Array(repeating: 0, count: m), count: n)
var cnt = 0
var max_cnt = 0

func is_valid(x:Int , y:Int)->Bool{
    if x >= 0 , y >= 0, x < n, y < m{
        return true
    }
    return false
}

func dfs(x:Int, y:Int){
    if !is_valid(x: x, y: y){
        return
    }
    if graph[x][y] == 1 {
        graph[x][y] = 0
        dfs(x: x, y: y-1)
        dfs(x: x, y: y+1)
        dfs(x: x+1, y: y)
        dfs(x: x-1, y: y)
        cnt += 1
        return
    }
    return
}

for _ in 1...k{
    let xy = readLine()!.split(separator: " ").map{Int($0)!}
    let x = xy[0] - 1, y = xy[1] - 1
    graph[x][y] = 1
}

for x in 0...n-1{
    for y in 0...m-1{
        cnt = 0
        if graph[x][y] == 1{
            dfs(x: x,y: y)
            max_cnt = max(max_cnt, cnt)
        }
    }
}
print(max_cnt)
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.