๋ฌธ์
https://www.acmicpc.net/problem/10026
๋ด ๋ฌธ์ ํ์ด
let n = Int(readLine()!)!
var picture = [[Character]]()
var count = 0
var count2 = 0
for _ in 0..<n { picture.append(Array(readLine()!)) }
func dfs(_ x: Int, _ y: Int, _ mark: Character, _ color: Character) {
if x < 0 || y < 0 || x >= n || y >= n || picture[x][y] == mark || picture[x][y] != color { return } // ์์ธ
picture[x][y] = mark // ์ด๋ฏธ ์ฒดํฌํ ์๋ฆฌ ํ์ํด์ ์ค๋ณต ํผํ๊ธฐ
// ์ฌ๊ท ํธ์ถ
dfs(x+1, y, mark, color)
dfs(x-1, y, mark, color)
dfs(x, y+1, mark, color)
dfs(x, y-1, mark, color)
}
// ์ ๋ก์์ฝ ์๋ ์ฌ๋ (1์ฐจ)
for i in 0..<n {
for j in 0..<n {
if picture[i][j] == "c" || picture[i][j] == "s" { continue }
else {
if picture[i][j] == "R" { dfs(i, j, "s", "R") }
else if picture[i][j] == "G" { dfs(i, j, "s", "G") }
else if picture[i][j] == "B" { dfs(i, j, "c", "B") }
count += 1
}
}
}
// ์ ๋ก์์ฝ์ธ ์ฌ๋ (2์ฐจ)
for i in 0..<n {
for j in 0..<n {
if picture[i][j] == "f" { continue }
else {
if picture[i][j] == "s" { dfs(i, j, "f", "s") }
else if picture[i][j] == "c" { dfs(i, j, "f", "c") }
count2 += 1
}
}
}
print(String(count) + " " + String(count2))
๐ dfs๋ก ํ์ด์ฃผ์๊ณ , ์ ๋ก์์ฝ์ด ์๋ ์์ ์ ๋จผ์ ์ฒดํฌํ ํ ์ ๋ก์์ฝ์ผ ๋๋ฅผ ์ฒดํฌํด์ฃผ๋ฉด ์ฝ๋ค.
- 1์ฐจ๋ก ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ ์์ ์ผ๋ก dfs๋ฅผ ๋๋ ค์ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํ๊ณ ,
2์ฐจ๋ก ์ ๋ก์์ฝ์ธ ์ฌ๋์ ์์ ์ผ๋ก dfs๋ฅผ ๋๋ ค์ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํด์ฃผ์๋ค. - picture๋ผ๋ ๋ฐฐ์ด์ ์ฃผ์ด์ง ๊ทธ๋ฆผ์ ์๊น๋ค์ ์ ์ฅํ๋๋ฐ, picture์ var๋ก ๋๊ณ
dfs๋ฅผ ๋๋ฆฌ๋ฉด์ ์ฒดํฌ๋ฅผ ์๋ฃํ ์๋ฆฌ๋ ๋ค๋ฅธ ์ํ๋ฒณ์ผ๋ก ๋ฐ๊ฟ์ ์ค๋ณต์ ํผํ ์ ์๊ฒ ํ๋ค. - ๋จผ์ 1์ฐจ์์๋ ์์ญ์ R, G, B๋ก ๋๋ ์ ์ฒดํฌํ๋๋ฐ,
์ฒดํฌํ๋ฉด์ R๊ณผ G์ ๊ฒฝ์ฐ์๋ ์ฒดํฌ ์๋ฃํ ์๋ฆฌ๋ฅผ "s"๋ก, B๋ "c"๋ก ๋ฐ๊ฟจ๋ค.
2์ฐจ๋ก ์ฒดํฌํ ๋๋ ์ ๋ก์์ฝ์ ์ ์ฅ์์ ์ฒดํฌํด์ผํ๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ๊ตฌ๋ถํ๋ค. - 2์ฐจ๋ก ์ฒดํฌํ ๋๋ picture์ ๋ชจ๋ ์๋ฆฌ์ "s"ํน์ "c"๋ง ์์ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ s์ c๋ก ์์ญ์ ๊ตฌ๋ถํด์ ์์ญ์ ๊ฐ์๋ฅผ ๊ตฌํด์ฃผ๋ฉด ๋๋ค.
๐ก ํผ๋๋ฐฑ
- dfs๋ฅผ ๋๋ฆฌ๋ for๋ฌธ์ ๋ ๋ฒ์ด๋ ๋๋ ค์ผ ํด์ 1์ด ์์ ๋ฌธ์ ๊ฐ ๋์๊ฐ์ง..?๊ฐ ์๋ฌธ์ด๋ผ
ํ๋ฉด์ ์กฐ๊ธ ๊ฑฑ์ ๋์ง๋ง ์ ๋์๊ฐ๋ค. - ํ์ dfs๋ฅผ ์ ์ธ ์ค ์๋ ์ฌ๋์ด๋ผ๋ฉด ๋ชจ๋ ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค.
'3๏ธโฃ Swift > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift Algorithm] ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ BOJ #2206 (0) | 2022.01.26 |
---|---|
[Swift Algorithm] ์๊ธฐ ์์ด BOJ #16236 (0) | 2022.01.25 |
[Swift Algorithm] ํ ํธ๋ก๋ฏธ๋ ธ BOJ #14500 (2) | 2022.01.19 |
[Swift Algorithm] ์ด์ค์ฐ์ ์์ํ Programmers(Lv.3) (0) | 2021.12.21 |
[Swift Algorithm] ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 4 BOJ #11659 (2) | 2021.10.20 |
๋๊ธ