๋ฌธ์ ์ค๋ช
<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ ์ฌ๊ฐํ ๋ชจ์์ ์ง๋๊ฐ ์๋ค. 1์ ์ง์ด ์๋ ๊ณณ์, 0์ ์ง์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ์ฒ ์๋ ์ด ์ง๋๋ฅผ ๊ฐ์ง๊ณ ์ฐ๊ฒฐ๋ ์ง์ ๋ชจ์์ธ ๋จ์ง๋ฅผ ์ ์ํ๊ณ , ๋จ์ง์ ๋ฒํธ๋ฅผ ๋ถ์ด๋ ค ํ๋ค. ์ฌ๊ธฐ์ ์ฐ๊ฒฐ๋์๋ค๋ ๊ฒ์ ์ด๋ค ์ง์ด ์ข์ฐ, ํน์ ์๋์๋ก ๋ค๋ฅธ ์ง์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ๋๊ฐ์ ์์ ์ง์ด ์๋ ๊ฒฝ์ฐ๋ ์ฐ๊ฒฐ๋ ๊ฒ์ด ์๋๋ค. <๊ทธ๋ฆผ 2>๋ <๊ทธ๋ฆผ 1>์ ๋จ์ง๋ณ๋ก ๋ฒํธ๋ฅผ ๋ถ์ธ ๊ฒ์ด๋ค. ์ง๋๋ฅผ ์ ๋ ฅํ์ฌ ๋จ์ง์๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ฐ ๋จ์ง์ ์ํ๋ ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ง๋์ ํฌ๊ธฐ N(์ ์ฌ๊ฐํ์ด๋ฏ๋ก ๊ฐ๋ก์ ์ธ๋ก์ ํฌ๊ธฐ๋ ๊ฐ์ผ๋ฉฐ 5≤N≤25)์ด ์ ๋ ฅ๋๊ณ , ๊ทธ ๋ค์ N์ค์๋ ๊ฐ๊ฐ N๊ฐ์ ์๋ฃ(0ํน์ 1)๊ฐ ์ ๋ ฅ๋๋ค.
์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ด ๋จ์ง์๋ฅผ ์ถ๋ ฅํ์์ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋จ์ง๋ด ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ์์ค.
๋ด ๋ฌธ์ ํ์ด
์ ๋ ฅ
7
0110100
0110101
1110101
0000111
0100000
0111110
0111000
์ถ๋ ฅ
3
7
8
9
๋ด ๋ฌธ์ ํ์ด
let n = Int(readLine()!)! // ์
๋ ฅ๋๋ ํ ๋ณ์ ํฌ๊ธฐ
var map = [[Int]]()
var count = 0
var block = [Int]()
let dx = [-1, 1, 0, 0], dy = [0, 0, -1, 1]
for _ in 0..<n {
map.append(Array(readLine()!.map({Int(String($0))!})))
}
// dfs ํจ์
func dfs(_ x: Int, _ y: Int) {
if x < 0 || y < 0 || x >= n || y >= n || map[x][y] == 0 { return } // ์์ธ
count += 1 // ๋จ์ง ๋์ด ๋์
map[x][y] = 0 // ์ด๋ฏธ ์ฒดํฌํ ์๋ฆฌ๋ 0์ผ๋ก ๋ฐ๊ฟ์ ์ค๋ณต ๊ฒ์ฌ ํผํด์ฃผ๊ธฐ
// ์ฌ๊ท ํธ์ถ
dfs(x+1, y)
dfs(x-1, y)
dfs(x, y+1)
dfs(x, y-1)
}
// ๋ฉ์ธ ์คํ
for i in 0..<n {
for j in 0..<n {
if map[i][j] == 1 {
count = 0 // count ์ด๊ธฐํ
dfs(i, j) // dfs ํธ์ถ
block.append(count) // block ๋ฐฐ์ด์ ๋ฐฉ๊ธ ๊ตฌํ ๋จ์ง ํฌ๊ธฐ ์ถ๊ฐ
}
}
}
print(block.count)
print(block.sorted().map({String($0)}).joined(separator: "\n"))
๐ dfs ๋ฌธ์ ๋ก, 1๋ก ์ด์ด์ง ๊ตฌ์ญ๋ค๋ก ๋๋ ์ ํ์ํด์ฃผ๋ ๊ฒ์ด ํฌ์ธํธ!
์์ฃผ ์ ํ์ ์ธ ๋ฌธ์ ์ด๋ฏ๋ก ๋ด ํ์ด์ ์ฃผ์ ํน์ง๋ง ์๊ธฐํ์๋ฉด,
์ํ์ข์ฐ๋ฅผ ๊ฒ์ฌํ์ฌ 1์ด ์๋์ง๋ง ๊ฒ์ฌํด์ฃผ๋ฉด ๋๋ ์์ฃผ ๊ฐ๋จํ ๋์๋ค์ ๋ฐ๋ณต์ด๋ฏ๋ก
dfs ํจ์๋ฅผ ์์ฑํ ๋ ๊ตณ์ด ๋ฐ๋ณต๋ฌธ์ ์์ฑํด์ฃผ์ง ์๊ณ ์ฌ๊ท ํธ์ถ๋ก ๊ตฌ์ฑํด์ฃผ์๋ค.
๋ฐ๋ก ์ด์ ์ ํ์๋ #2583 ์์ญ๊ตฌํ๊ธฐ ๋ฌธ์ ์ ์ ๋ง 99.9ํผ์ผํธ ๋์ผํ๋ฏ๋ก..!
์์ธํ ํ์ด ๊ณผ์ ์ ์ด์ ๊ฒ์๊ธ์ ์ฐธ๊ณ ์ธํด์ฃผ์ธ์ฉ
๐ก ํผ๋๋ฐฑ
- ์์ญ๊ตฌํ๊ธฐ ๋ฟ๋ง ์๋๋ผ ๋ง์ด ํ์ด๋ณธ ์์ฃผ ์ ํ์ ์ธ dfs ๋ฌธ์ ์๊ณ ,,!
๋ฌธ์ ์ฝ๋๊ฒ๋ถํฐ ์ ์ถ๊น์ง 10๋ถ๋ ์๊ฑธ๋ ธ๋ค. ์ด์ ์ข dfs๊ฐ ์ต์ํด์ง๋ ๊ฒ ๊ฐ๋ค. - ์ด๋ฐ ๋ฅ์ ๋ฌธ์ ๊ฐ ์ด์ํ์ ๋ถ๋ค์ #2916 ๊ทธ๋ฆผ ๋ฌธ์ ๋ฅผ ๋จผ์ ํ์ด๋ณด์๋ฉด ์กฐ์๋ฏํฉ๋๋ค.
๋ฌธ์
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ์์ ์์ญ BOJ #2468 (2) | 2021.10.12 |
---|---|
[Swift Algorithm] ๋์ดํธ์ ์ด๋ BOJ #7562 (0) | 2021.10.11 |
[Swift Algorithm] ์์ญ ๊ตฌํ๊ธฐ BOJ #2583 (0) | 2021.10.10 |
[Swift Algorithm] ํ ๋งํ BOJ #7659 (0) | 2021.10.08 |
[Swift Algorithm] ์ ๊ธฐ๋ ๋ฐฐ์ถ BOJ #1012 (0) | 2021.10.05 |
๋๊ธ