๋ฌธ์ ์ค๋ช
์ด๋ค ํฐ ๋ํ์ง์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์์ ๋, ๊ทธ ๊ทธ๋ฆผ์ ๊ฐ์์, ๊ทธ ๊ทธ๋ฆผ ์ค ๋์ด๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด๋ผ๋ ๊ฒ์ 1๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํ ๊ทธ๋ฆผ์ด๋ผ๊ณ ์ ์ํ์. ๊ฐ๋ก๋ ์ธ๋ก๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ด๊ณ ๋๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ ๋จ์ด์ง ๊ทธ๋ฆผ์ด๋ค. ๊ทธ๋ฆผ์ ๋์ด๋ ๊ทธ๋ฆผ์ ํฌํจ๋ 1์ ๊ฐ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ํ์ง์ ์ธ๋ก ํฌ๊ธฐ n(1 ≤ n ≤ 500)๊ณผ ๊ฐ๋ก ํฌ๊ธฐ m(1 ≤ m ≤ 500)์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ n+1 ์ค ๊น์ง ๊ทธ๋ฆผ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (๋จ ๊ทธ๋ฆผ์ ์ ๋ณด๋ 0๊ณผ 1์ด ๊ณต๋ฐฑ์ ๋๊ณ ์ฃผ์ด์ง๋ฉฐ, 0์ ์์น ์ด ์๋ ๋ถ๋ถ, 1์ ์์น ์ด ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค)
์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ๊ทธ๋ฆผ์ ๊ฐ์, ๋์งธ ์ค์๋ ๊ทธ ์ค ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ 0์ด๋ค.
์ ์ถ๋ ฅ ์์
์ ๋ ฅ
6 5
1 1 0 1 1
0 1 1 0 0
0 0 0 0 0
1 0 1 1 1
0 0 1 1 1
0 0 1 1 1
์ถ๋ ฅ
4
9
๋ด ๋ฌธ์ ํ์ด
import Foundation
let paper = readLine()!.split(separator: " ").map({Int(String($0))!}) // ์ฃผ์ด์ง ๋ํ์ง์ ํฌ๊ธฐ (์ธ๋ก, ๊ฐ๋ก)
var check = [[Int]]() // ๋ํ์ง ์นธ ๋ณ๋ก ์ซ์ ์
๋ ฅ๋ฐ๋ ๋ฐฐ์ด
for _ in 0..<paper[0] {
check.append(Array(readLine()!.split(separator: " ").map({Int(String($0))!})))
}
var count = 0 // ๊ทธ๋ฆผ ๊ฐ์ ์นด์ดํธ
var area = 0 // ๊ทธ๋ฆผ๋ง๋ค ๋์ด ์ฒดํฌ
var max = 0 // ์ต๋ ๊ทธ๋ฆผ ํฌ๊ธฐ
// dfs ์ฌ๊ทํจ์
func solution(_ x: Int, _ y: Int) {
if x < 0 || x >= paper[0] || y < 0 || y >= paper[1] || check[x][y] != 1 { return }
check[x][y] = 0
area += 1
// ์ฌ๊ท ํธ์ถ (ํ์ฌ ์๋ฆฌ์ ๋ถ์ด์๋ ์ฃผ๋ณ ๋ชจ๋ ์๋ฆฌ ํ์ธ)
solution(x+1, y) // ์ธ๋ก๋ก ๋ค์ ์๋ฆฌ
solution(x-1, y) // ์ธ๋ก๋ก ์ ์๋ฆฌ
solution(x, y+1) // ๊ฐ๋ก๋ก ๋ค์ ์๋ฆฌ
solution(x, y-1) // ๊ฐ๋ก๋ก ์ ์๋ฆฌ
}
// ์ธ๋ก๊ฐ 0 ์ด์์ผ ๊ฒฝ์ฐ ์ฝ๋ ์คํ
if paper[0] > 0 {
for i in 0..<paper[0] {
for j in 0..<paper[1] {
if check[i][j] == 1 {
area = 0
solution(i, j)
count += 1 // ์นด์ดํธ
if max < area { max = area }
}
}
}
}
print(count) // ๊ทธ๋ฆผ์ ๊ฐ์
print(max) // ์ต๋ ๊ทธ๋ฆผ์ ํฌ๊ธฐ
๐ DFS ๋ฌธ์ ! 1๋ก ์ฑ์์ง ๋ชจ๋ ์๋ฆฌ์, ๊ทธ ์๋ฆฌ์ ์ด์ด์ง ๋ชจ๋ ์๋ฆฌ๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ์ด ํฌ์ธํธ!!
1์ด ์์ผ๋ฉด ๊ทธ ์๋ฆฌ ์ฃผ๋ณ์ ๋ชจ๋ ์๋ฆฌ๋ฅผ ๊ฒ์ฌํ๋ ๋๊ฐ์ ์ํ์ ๊ณ์ ๋ฐ๋ณตํด์ผํ๋ฏ๋ก ์ฌ๊ทํจ์๋ก ํ์ดํ๋ค.
- 1) ์ฐ์ ์ฐ์ฐ์ ํ์ํ ์ฃผ์ ๋ณ์ ์ธ ๊ฐ๋ฅผ ์ ์ธํด์ฃผ์๋ค.
count๋ ๋ต์ผ๋ก ์ถ๋ ฅํด์ผํ๋ ์์ ์ค ํ๋๋ก, ๊ทธ๋ฆผ์ ์ด ๊ฐ์๋ฅผ ๋ด์ ์์ !
area๋ ์ฌ๊ทํจ์ ์์์ 1์ฉ ๋ํด๊ฐ๋ฉฐ ๊ฐ ๊ทธ๋ฆผ๋ง๋ค์ ๋๋น๋ฅผ ์ธก์ ํ๊ธฐ ์ํ ๊ฒ.
max๋ count์ ํจ๊ป ๋ต์ผ๋ก ์ถ๋ ฅํ ์์๋ก, ๋ ํฐ area๊ฐ ๋ฑ์ฅํ ๋๋ง๋ค ๊ณ์ ์ ๋ฐ์ดํธ! - 2) DFS ์ฌ๊ทํจ์๋ฅผ ํ์ธํ๊ธฐ ์ ์๋์ ๋ฉ์ธ ์คํ ์ฝ๋๋ฅผ ๋จผ์ ํ์ธํด๋ณด์.
2์ค for๋ฌธ์ ํ์ฉํ์ฌ ๋ชจ๋ ์นธ์ ๊ฒ์ฌํ ์ ์๋๋ก ํ๊ณ ,
๊ฒ์ฌํ๋ค๊ฐ ํด๋น ์นธ์ด 1์ผ ๊ฒฝ์ฐ ์์์ ์์ฑํ ์ฌ๊ทํจ์๋ฅผ ์คํํ๊ฒ ํ๋ค.
(์คํ์ํค๊ธฐ ์ ์๋ ๋๋น๋ฅผ ์ธก์ ํด์ค area ๋ณ์๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๋ค.)
๊ทธ๋ฆฌ๊ณ 1์ด ๋์๋ค๋๊ฑด ์ ์ด๋ ํฌ๊ธฐ๊ฐ 1์ธ ๊ทธ๋ฆผ์ด ํ๋ ์๋ค๋ ๋ป์ด๋ฏ๋ก count์ 1์ ๋ํด์คฌ๋ค.
๋ง์ง๋ง์ผ๋ก max๋ณด๋ค, ๋ฐฉ๊ธ ๋๋ฆฐ solution ํจ์๊ฐ ๊ตฌํ area๊ฐ ๋ ํฌ๋ฉด max๋ฅผ ์ ๋ฐ์ดํธํ๋ค. - 3) ์ด์ solution ์ฌ๊ทํจ์์ ์คํ ๊ณผ์ ์ ์ดํด๋ณด์.
์ด ๋ฌธ์ ๋ 1๋ก ์ฑ์์ง ์๋ฆฌ๋ค์ด ๋ช ๊ฐ๊น์ง ์ด์ด์ ธ์๋์ง๋ฅผ ์ฒดํฌํด์ผํ๋ค.
๋ฐ๋ผ์ solution ํจ์ ์์์ ์ธ๋ก, ๊ฐ๋ก๋ก ๋ชจ๋ ๋ฐฉํฅ์ผ๋ก ๋ค์ solution ํจ์๋ฅผ ํธ์ถํ์ฌ
์ํ์ข์ฐ์ ์๋ฆฌ๊ฐ 1์ธ์ง 0์ธ์ง ์ฒดํฌํด์ค๋ค.
์ฒดํฌํ๋ ์๋ฆฌ๊ฐ ๋ํ์ง์ ๋ฒ์๋ฅผ ๋์ด์๊ฑฐ๋ 0์ผ ๊ฒฝ์ฐ๋ if๋ฌธ์ ์ด์ฉํด ์์ธ๋ก ๋นผ์ฃผ์๊ณ ,
๊ทธ ์ธ์ ๊ฒฝ์ฐ๋ ํ์ฌ ์ฒดํฌ์๋ฃํ ์๋ฆฌ๋ฅผ 0์ผ๋ก ๋ณ๊ฒฝํด์ค ํ area์๋ 1์ ๋ํ๋ค.
(0์ผ๋ก ๋ณ๊ฒฝํด์ค ์ด์ ๋, ์ด์ฐจํผ ์ด์ด์ง ์๋ฆฌ๋ค์ ํ๋์ ๊ทธ๋ฆผ์ด๋ผ ๋ค์ ๊ฒ์ฌํ ํ์๊ฐ ์๋๋ฐ
1๋ก ๊ทธ๋๋ก ๋๋๋ฉด ์ค๋ณต์ผ๋ก ๊ณ์ ๊ฐ์ ๊ทธ๋ฆผ์ ๊ฒ์ฌํ๊ฒ ๋๋๊น.,,!!)
๐ก ํผ๋๋ฐฑ
- ์ฒ์ ์ ํ DFS ๋ฌธ์ ๋ผ์ ๋ชจ๋ ์๋ฆฌ๋ฅผ ๊ฒ์ฌํด์ผํ๋์ค ๋ชจ๋ฅด๊ณ
์ด๋ฆฌ์ ๋ฆฌ ํจ์จ์ ์ธ ๋ฐฉ์์ ์๊ฐํด๋ณด๋ค๊ฐ ๋ค๋ฅธ ๋ถ๋ค ํ์ด๋ฅผ ๊ฒ์ํด์ ํ๊ฒ๋๋๋ฐ,!
๋ชจ๋ ์๋ฆฌ๋ฅผ ์ํ์ข์ฐ๋ก ๊ผผ๊ผผํ ์ดํด์ค์ผํ๋๊ตฌ๋ญ.,. - ์์ง DFS๊ฐ ์ต์ํ์ง ์์์ ๋ ํ์ด๋ด์ผํ ๋ฏ.,!@
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ํ ๋งํ BOJ #7576 (0) | 2021.10.02 |
---|---|
[Swift Algorithm] ๋ฏธ๋ก ํ์ BOJ #2178 (0) | 2021.10.01 |
[Swift Algorithm] ์ฃผ์ BOJ #11501 (0) | 2021.09.02 |
[Swift Algorithm] ๊ณต์ฃผ๋์ ์ ์ BOJ #2457 (0) | 2021.09.01 |
[Swift Algorithm] ์ค ์ธ์ฐ๊ธฐ BOJ #7570 (1) | 2021.08.29 |
๋๊ธ