from collections import deque
def bfs(x,y):
q.append((x, y)) # 큐에 현재 좌표 추가
dx = [-1, 0, 1, 0] # 움직일 방향
dy = [0, 1, 0, -1]
visited[x][y] = 1 # 현재 위치 기준.
while q: # 큐가 비지 않았다면
x, y = q.popleft() # 첫번째값을 가져옴.
for d in range(4): # 4방향으로 이동
nx = x + dx[d]
ny = y + dy[d]
# x, y가 범위를 벗어나지 않고, 같은 색이고, 아직 방문하지 않은 경우
if 0 <= nx < n and 0 <= ny < n and a[nx][ny] == a[x][y] and not visited[nx][ny]:
visited[nx][ny] = 1 # 방문 체크 후 큐에 추가
q.append((nx, ny))
n = int(input())
a = [list(input()) for _ in range(n)] # 그림
q = deque() # 큐
visited = [[0] * n for _ in range(n)] # 방문여부 저장
cnt1 = 0 # 적록색약 아닌사람이 보는 영역
for i in range(n):
for j in range(n):
if not visited[i][j]: # 아직 방문하지 않은 곳이라면 bfs로 탐색
bfs(i, j)
cnt1 += 1 # 탐색이 끝나면 영역개수 추가
for i in range(n): # 적록색약이 보는 영역을 판단하기 위해 초록을 빨강으로 바꿈
for j in range(n):
if a[i][j] == 'G':
a[i][j] = 'R'
visited = [[0] * n for _ in range(n)] # 방문여부 초기화
cnt2 = 0 # 적룍색약인 사람이 보는 영역
for i in range(n):
for j in range(n):
if not visited[i][j]: # 아직 방문하지 않은 곳이라면 탐색
bfs(i, j)
cnt2 += 1 # 탐색 끝나면 영역 개수 추가
print(cnt1, cnt2)
https://www.acmicpc.net/problem/10026
'study > Algorithm' 카테고리의 다른 글
[백준] 파이썬 1697번: 숨바꼭질 (0) | 2024.04.09 |
---|---|
[백준] 파이썬 7562번: 나이트의 이동 (0) | 2024.04.09 |
[백준] 파이썬 19638 : 센티와 마법의 뿅망치 (0) | 2024.04.09 |
[백준] 파이썬 2304 : 창고 다각형 (0) | 2024.04.09 |
[백준] 파이썬 2108 : 통계학 (0) | 2024.04.09 |