백준 문제 링크
적록색약
- BFS를 사용했다.
- BFS 함수를 만들건데,
다음 좌표가 범위 안에 있고, 방문 전이고,
다음 좌표의 색깔과 현재 좌표의 색깔이 같을 때만
방문처리하고 큐에 넣는 함수를 만들어야한다.- 이제 적록색약이 아닐 때와 적록색약일 때를 구분해야 한다.
- 적록색약이 아닐때는 visited 를 만들고,
좌표에 아직 방문하지 않았다면 함수를 실행시키고,
cnt1 + 1 해준다.- 적록색약일 때는 visited를 만들고,
G를 R로 바꿔줘야한다.
색깔을 바꾼 뒤 위의 방식처럼
좌표에 아직 방문하지 않았다면 함수를 실행시키고,
cnt2 + 1 해준다.
- print(cnt1, cnt2) 끝!
from collections import deque
n = int(input())
graph = []
for _ in range(n):
graph.append(list(input()))
def RGB(x, y):
queue = deque()
queue.append((x, y))
visited[x][y] = True
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
while queue:
x, y = queue.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0 <= nx < n) and (0 <= ny < n):
if not visited[nx][ny] and graph[nx][ny] == graph[x][y]: # 색깔이 같을 때
visited[nx][ny] = True
queue.append((nx, ny))
cnt1, cnt2 = 0, 0
# 적록색약 아닐 때
visited = [[False] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if not visited[i][j]:
RGB(i,j)
cnt1 += 1
# 적록색약 일 때
visited = [[False] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if graph[i][j] == 'G':
graph[i][j] = 'R'
for i in range(n):
for j in range(n):
if not visited[i][j]:
RGB(i,j)
cnt2 += 1
print(cnt1, cnt2)