문제 링크
https://www.acmicpc.net/problem/10026
문제 풀이
적록색약인 사람과 아닌 사람을 flag로 구분하여
bfs 탐색 내에서 'R', 'G'를 구분할지 말지만 구현해주면 되는 쉬운 BFS 문제였습니다.
from collections import deque
def bfs(i, j, flag, visited):
q = deque()
q.append([i, j])
visited[i][j] = 1
color = graph[i][j]
while q:
x, y = q.popleft()
for dir in range(4):
nx, ny = x + dx[dir], y + dy[dir]
if 0 <= nx < n and 0 <= ny < n and not visited[nx][ny]:
if (color == 'R' or color == 'G') and flag:
if graph[nx][ny] == 'R' or graph[nx][ny] == 'G':
q.append([nx, ny])
visited[nx][ny] = 1
else:
if graph[nx][ny] == color:
q.append([nx, ny])
visited[nx][ny] = 1
return 1
n = int(input())
graph = [list(input().strip()) for _ in range(n)]
visited = [[0] * n for _ in range(n)]
rg_visited = [[0] * n for _ in range(n)]
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
result = 0
rg_result = 0
# 적록색약이 아닌 사람
for i in range(n):
for j in range(n):
if not visited[i][j]:
result += bfs(i, j, False, visited)
# 적록색약인 사람
for i in range(n):
for j in range(n):
if not rg_visited[i][j]:
rg_result += bfs(i, j, True, rg_visited)
print(result, rg_result)
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 2230 수 고르기 (파이썬 python) (0) | 2024.03.16 |
---|---|
[백준] 11659 구간 합 구하기 4 (파이썬 python) (2) | 2024.03.15 |
[백준] 2573 빙산 (파이썬 python) (0) | 2024.03.14 |
[백준] 9466 텀 프로젝트 (파이썬 python) (0) | 2024.03.14 |
[백준] 1600 말이 되고픈 원숭이 (파이썬 python) (0) | 2024.03.13 |