์ํด๊ฐ ๋ฐ์์ต๋๋ค!
๋ค๋ค ์ํด๋ณต ๋ง์ด ๋ฐ์ผ์๊ณ ํ์๋ ์ผ ๋ค ์๋์๊ธธ ๊ธฐ์ํฉ๋๋ค! 24๋
์ ์ฝ๋ฉ์ค๋ ฅ ๋ง์ด ์ค๋ฅด๊ฒ ํด์ฃผ์ธ์ ใ
ใ
...
10026๋ฒ - ์ ๋ก์์ฝ
์์๊ฐ์ด 3์ ๋ฐฐ์ด ๊ทธ๋ฆผ์ด ์ฃผ์ด์ง๋ฉด ๊ตฌ์ญ(๋์ผํ ๊ฐ ์๊น์ด ๋ญ์ณ์๋ ๊ณณ)์ด ์ด ๋ช ๊ฐ์ธ์ง ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
๋จ, ์์ฝ์ธ ์ฌ๋์ ์ํด์ R๊ณผ G๋ฅผ ๋์ผํ๊ฒ ์ทจ๊ธํ์ฌ ๊ตฌํ ๊ฒฐ๊ณผ ๋ํ ์ถ๋ ฅํด์ผ ํฉ๋๋ค.
from collections import deque
import copy
dx = [-1,1,0,0]
dy = [0,0,-1,1]
๋ณด์๋ง์ BFS๋ก ํ์ด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
ํญ์ BFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ์ธํ
, ์ํ์ข์ฐ ์ ์ธ๊ณผ que๋ฅผ ๋ถ๋ฌ์์ค๋๋ค.
N = int(input())
que = deque()
graph = []
for _ in range(N):
graph.append(list(input()))
visited = [[0]*N for _ in range(N)]
graph_sakyak = copy.deepcopy(graph)
๊ทธ๋ฆผ์ ์ ์ ๋ณด๋ฅผ ๋ฐ์์ค graph ๋ฆฌ์คํธ๋ฅผ ํ๋ ๋ง๋ค๊ณ ํด๋น ์ธ๋ฑ์ค๋ฅผ ๋ฐฉ๋ฌธํ๋์ง ํ๊ธฐํด์ค visited ๋ณ์๋ฅผ ํ๋ ๋ง๋ค์ด์ค๋๋ค. ํ์ฌ ์ด๊ธฐ๊ฐ graph์ ๋์ผํ graph_sakyak์ ํ๋ ๋ง๋ค์ด ๋์ค์ ์์ฝ์ธ ๊ทธ๋ํ๋ฅผ ํ๋ณํด์ฃผ๋๋ก ํฉ์๋ค.
๋จผ์ ์์ฝ์ด ์๋ ๊ฒฝ์ฐ์ ๊ตฌ์ญ์ ๊ตฌํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค.
sum = 0
for i in range(N):
for j in range(N):
if not visited[i][j]:
sum += 1
bfs(i,j)
๋ง์ฝ ํด๋น ๊ตฌ์ญ ๋ฐฉ๋ฌธ์ ์ํ์ผ๋ฉด ๊ตฌ์ญ ๋ฐฉ๋ฌธ ํ์(sum)์ ๋์ด๊ณ ํด๋น ๊ตฌ์ญ์ ์ ๋ถ ํ์ํด์ฃผ๊ฒ ์ต๋๋ค.
if graph_sakyak[i][j] == 'G':
graph_sakyak[i][j] = 'R'
์์ฝ์ธ ๊ฒฝ์ฐ๋ G๊ฐ R๋ก ๋ณด์ด๊ฑฐ๋ R์ด G๋ก ๋ณด์ด๊ธฐ ๋๋ฌธ์ ์ธ๋ฐ์๋ for๋ฌธ ๋ญ๋น๋ฅผ ์ค์ด๊ธฐ ์ํด์ ์ฌ๊ธฐ์ graph_sakyak์ R๊ณผ G๋ฅผ ๋์ผํ๊ฒ ๋ง๋ค์ด ์๋งน ํจ๊ณผ๋ฅผ ์ฃผ๊ฒ ์ต๋๋ค.
def bfs(x,y):
que.append([x,y])
while que:
x,y = que.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx<0 or ny<0 or nx>=N or ny>=N:
continue
๋ฐฉ๋ฌธํ์ง ์์ ์ธ๋ฑ์ค์ 4๋ฐฉํฅ ํ์์ ๋์์ค๋๋ค.
if graph[x][y] == 'R' and graph[nx][ny] == 'R' and not visited[nx][ny]:
visited[nx][ny] = 1
que.append([nx,ny])
if graph[x][y] == 'G' and graph[nx][ny] == 'G' and not visited[nx][ny]:
visited[nx][ny] = 1
que.append([nx,ny])
if graph[x][y] == 'B' and graph[nx][ny] == 'B' and not visited[nx][ny]:
visited[nx][ny] = 1
que.append([nx,ny])
๋ง์ฝ ์๊ธฐ ์์ ์ด ํด๋น ์๊น์ด๊ณ ๊ทธ ๋ค์ ๋์ฌ ๊ฒ๋ ํด๋น ์๊น์ด๋ฉด ๊ทธ๊ฑด ๊ณง ๊ตฌ์ญ์ด ํ์ฑ๋๋ฏ๋ก ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ํด์ฃผ๊ณ ๋ค์ ๋์ฌ ์ธ๋ฑ์ค๋ ํ์์ ๋ฃ์ด์ฃผ๋๋ก ํฉ์๋ค.
์๊ธฐ ์์ ์ด if๋ฌธ ์กฐ๊ฑด์ ๋ค์ด๊ฐ๋ค๋ฉด R->R ํ์๋ง ๊ฐ๋ฅํด R->B ๋๋ R->G์ ๊ฐ์ด ํ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ์์ ํด๋น ๊ตฌ์ญ๋ง ํ์์ด ๊ฐ๋ฅํฉ๋๋ค.
์์ฝ์ผ ๋๋ ์๊น ๋ง๋ค์ด์ค graph_sakyak์ graph์ ๋ง์์์ ๋ค์ bfs ํ์์ ๋๋ฆฌ๋ฉด ๋ฉ๋๋ค.
visited = [[0]*N for _ in range(N)]
graph = graph_sakyak[:]
sum2 = 0
์ด๋ฐ์ฉ์ผ๋ก์.
์ฐธ๊ณ ๋ก graph_sakyak์ ๋ง๋ค ๋๋ graph์ ๋ง์์ธ๋๋ ๋ณต์ ๋ฐฉ๋ฒ์ด ๋ค๋ฅธ ์ด์ ๋ shallow copy๋ deep copy ๊ธฐ๋ฒ ๋๋ฌธ์ ๊ทธ๋ ์ต๋๋ค. ๊น์ ๋ณต์ฌ๋ฅผ ํ์ง ์์ผ๋ฉด ์๋ณธ ๋ฐฐ์ด์ ์ํฅ์ ๋ฐ์์ ๋ฆฌ์คํธ๊ฐ ์ค์ผ๋ ์ ์์ต๋๋ค.
for k in range(N):
for p in range(N):
if not visited[k][p]:
sum2 += 1
bfs(k,p)
๋ฐฉ๊ธ ๋ง์๋๋ ธ๋ฏ์ด graph_sakyak์ ๋ง์์ด graph๋ฅผ ๋ค์ ํ๋ฒ BFS๋ฅผ ๋๋ ค์ฃผ๋๋ก ํฉ์๋ค.
print(sum,sum2)
๋ง์ง๋ง์ผ๋ก ๊ตฌ์ญ ํฉ์ฐํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ์ ์์ ์ผ๋ก ๋ต์ ๋์ถํ ์ ์์ต๋๋ค.