Swift ๋ก ํ์ด๋ณด๋ ๊ทธ๋ํ ๋ฌธ์ ์ ๋๋ค! ์ด๋ฒ์ฃผ์ Swift ์คํฐ๋์์ ๊ทธ๋ํ๋ฅผ ๋๊ฐ๋๋ฐ, ์๊ณ ๋ฆฌ์ฆ ์คํฐ๋์์๋ ๊ทธ๋ํ ๋ฌธ์ ํ์ด๊ฐ ์ฃผ์ ์ด๋ค์ ๐ ๊ฐ๋ ๊ณผ ๋ฌธ์ ๋ฅผ ๋์์ ์ ํ๋๊น ์ข์์!
๐ ํ์ด ๋ฐฉ๋ฒ
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์ขํ๋ฅผ ๊ฐ์ง๊ณ ๊ทธ๋ํ(2์ฐจ์ ๋ฐฐ์ด์ ๋งต)์ ๋ง๋ค ์ ์์ด์! ์ขํ (r, c) ๋ 2์ฐจ์ ๋ฐฐ์ด์์ arr[r-1][c-1] ๊ณผ ๊ฐ์ด ์ ๊ทผํ ์ ์์ต๋๋ค.
(๋ฌธ์ ๊ฐ ์ข ํน์ดํ๋ฐ..) ํต๋ก์ ๋จ์ด์ง ์์๋ฌผ ์ค ๊ฐ์ฅ ํฐ ์์๋ฌผ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค. ์ฃผ๋ณ์ ์๋ ์์๋ฌผ๋ผ๋ฆฌ๋ ๋ญ์น๊ฒ๋์ด ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค๊ณ ํด์. ์ฌ๊ธฐ์ ๊ทธ๋ํ์ ๊ตฌ์ญ์ ๋๋๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ฐํด๋ผ ์ ์์ต๋๋ค! ์ ๋ ์ด ๊ณผ์ ์์ DFS ๋ฅผ ์ด์ฉํด ๊ตฌ์ญ๋ง๋ค ๋ผ๋ฒจ๋ง์ ํ์ต๋๋ค.
โ๏ธ Swift ์ฝ๋
๋จผ์ , readLine() ํจ์๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ๋ ฅ์ ๋ฐ๊ณ ๊ทธ๋ํ๋ฅผ ๋ง๋ค์์ต๋๋ค.
0 - ๋น ํต๋ก, 1 - ์์๋ฌผ์ด ์๋ ํต๋ก
2์ฐจ์ ๊ทธ๋ํ๋ฅผ ๋ฐ๋ณตํ๋ฉฐ DFS ๋ฅผ ์ด์ฉํด์ ๊ทธ๋ํ์์ ์ธ์ ๋ ์์๋ฌผ๋ผ๋ฆฌ ๊ฐ์ ๋ผ๋ฒจ์ ์ฃผ๋ ๋ผ๋ฒจ๋ง ์์ ์ ์งํํ์ด์. ๋ผ๋ฒจ๋ง ์์ ์ ํ๋ฉด์, ์ธ์ ํ ์ขํ์ ๊ฐ์๋ฅผ ์ธ์ด ๋ฐํํฉ๋๋ค. ๋ฐ๋ณต๋ฌธ์์๋ ๋ฐํ๋ ๊ฐ์ ํตํด ์ต๋ ํฌ๊ธฐ๋ฅผ ๋น๊ตํด์ฃผ๋ฉด ๋ฉ๋๋ค.
์์ ๋ผ๋ฒจ๋ง ์ / ํ
1 0 0 0 2 0 0 0
0 1 1 0 -> 0 3 3 0
1 1 0 0 3 3 0 0
์ ์ถํ ์ฝ๋๋ ์๋์ ๊ฐ์ต๋๋ค.
import Foundation
// BOJ-1743 ์์๋ฌผํผํ๊ธฐ
func dfs(graph: inout [[Int]], y: Int, x : Int, label: Int) -> Int {
// ๊ทธ๋ํ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ ์ข
๋ฃ
if y < 0 || y >= graph.count || x < 0 || x >= graph[0].count {
return 0
}
// ์ด๋ฏธ ๋ผ๋ฒจ๋ง์ด ๋์ด์๊ฑฐ๋ 0์ธ ๊ฒฝ์ฐ ์ข
๋ฃ
if graph[y][x] != 1 {
return 0
}
graph[y][x] = label // ๋ผ๋ฒจ๋ง
// ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋ ์์ญ์ ๋ฐฉ๋ฌธํ๋ฉฐ ๊ฐ์๋ฅผ ์ผ๋ค.
var count = 1
count += dfs(graph: &graph, y: y-1, x: x, label: label)
count += dfs(graph: &graph, y: y+1, x: x, label: label)
count += dfs(graph: &graph, y: y, x: x-1, label: label)
count += dfs(graph: &graph, y: y, x: x+1, label: label)
return count
}
// Input
let line = readLine()!.split(separator: " ").map{Int($0)!}
var graph: [[Int]] = Array(repeating: Array(repeating: 0, count: line[1]), count: line[0])
for _ in 0..<line[2] {
let coord = readLine()!.split(separator: " ").map{Int($0)!}
graph[coord[0]-1][coord[1]-1] = 1
}
// Output
var label = 2
var max_size = 0
for y in 0..<line[0] {
for x in 0..<line[1] {
if graph[y][x] != 1 {
continue
}
let size = dfs(graph: &graph, y: y, x: x, label: label)
max_size = max(size, max_size)
if size > 0 {
label += 1
}
}
}
print(max_size)
Swift ๋ฅผ ํตํด ์๊ณ ๋ฆฌ์ฆ ํธ๋๊ฒ ๋ง๋ฅ ์ด๋ ต๋ค๊ณ ์๊ฐํ๋๋ฐ, ํ์ด๋ณด๋ Swift ๋ฅผ ์์ฃผ ์ธ ์ ์์ผ๋ ๋ ์ต์ํด์ง๊ณ ์ข๋ค์ ๐คฉ