๋ฌธ์ ๋งํฌ: www.acmicpc.net/problem/10026
๋ฌธ์ ์ค๋ช
- ์ ๋ก์์ฝ์ธ ์ฌ๋๊ณผ ์๋ ์ฌ๋์ matrix๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ ์๊ฐํฉ๋๋ค.
- ์ ๋ ์ ๋ก์์ฝ์ matrix๋ G๋ฅผ ๋ชจ๋ R๋ก ๋ฐ๊ฟ์ ๋ฌธ์ ๋ฅผ ํ์์ต๋๋ค.
- ๊ฐ๊ฐ์ matrix๋ฅผ BFS๋ฅผ ์ด์ฉํด ์, ํ, ์ข, ์ฐ๋ก ์ฐ๊ฒฐ๋ ๊ฐ์ ์์ ๋ชจ๋ ํ์ํฉ๋๋ค.
- ์ด๋ ์, ํ, ์ข, ์ฐ ์ธ๋ฑ์ค๋ฅผ ํธํ๊ฒ ๊ณ์ฐํ๊ธฐ ์ํด dx, dy๋ฅผ ์ ์ํด์ ์ฌ์ฉํ์ต๋๋ค.
- ๋ฐฉ๋ฌธํ matrix์ ์์๋ 0์ ๋์ ํด์ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํด์ค๋๋ค.
์์ค์ฝ๋
import sys
from collections import deque
def bfs(i, j, color, arr):
queue = deque()
queue.append((i, j)) # matrix[i][j]๋ถํฐ bfs ์์
arr[i][j] = 0 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
while queue:
x, y = queue.popleft()
for idx in range(4): # ์, ํ, ์ข, ์ฐ
nx = x + dx[idx]
ny = y + dy[idx]
# ์ธ๋ฑ์ค๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒฝ์ฐ
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
# ๊ฐ์ ์์ผ ๊ฒฝ์ฐ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๊ณ queue์ ๋ฃ๊ธฐ
if arr[nx][ny] == color:
arr[nx][ny] = 0
queue.append((nx, ny))
# ์, ํ, ์ข, ์ฐ
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
n = int(sys.stdin.readline())
matrix = [list(sys.stdin.readline()) for _ in range(n)] # ์ ๋ก์์ฝ ์๋
matrix_rg = [[0] * n for _ in range(n)] # ์ ๋ก์์ฝ
# ์ ๋ก์์ฝ์ matrix(์ด๋ก์์ ๋ชจ๋ ๋นจ๊ฐ์์ผ๋ก ๋ฐ๊ฟ)
for i in range(n):
for j in range(n):
if matrix[i][j] == 'R' or matrix[i][j] == 'G':
matrix_rg[i][j] = 'R'
else:
matrix_rg[i][j] = 'B'
answer = 0
answer_rg = 0
for i in range(n):
for j in range(n):
# ์ ๋ก์์ฝ ์๋ ์ฌ๋
if matrix[i][j] != 0:
bfs(i, j, matrix[i][j], matrix)
answer += 1
# ์ ๋ก์์ฝ์ธ ์ฌ๋
if matrix_rg[i][j] != 0:
bfs(i, j, matrix_rg[i][j], matrix_rg)
answer_rg += 1
print(answer, answer_rg)
728x90
'Algorithm > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค(BOJ) / Python] 1010๋ฒ: ๋ค๋ฆฌ ๋๊ธฐ (0) | 2021.03.30 |
---|---|
[๋ฐฑ์ค (BOJ) / Python] 18352๋ฒ: ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2021.03.30 |
[๋ฐฑ์ค(BOJ) / Python] 1260๋ฒ: DFS์ BFS (0) | 2021.03.15 |
[๋ฐฑ์ค(BOJ) / Python] 1946๋ฒ: ์ ์ ์ฌ์ (0) | 2021.03.09 |
[๋ฐฑ์ค BOJ / Python ] 14916๋ฒ: ๊ฑฐ์ค๋ฆ๋ (0) | 2021.03.08 |