알고리즘/백준
[Python] 백준 10026 : 적록색약
suwonieee
2023. 5. 5. 17:02
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
간단한 bfs 문제. 적록색약이 아닌 경우를 먼저 구해주고, 그림 리스트를 전부 돌며 R을 G로 바꿔준 후 다시 bfs를 실시했다.
from collections import deque
dir = [(0,-1),(0,1),(-1,0),(1,0)]
def area(r,c):
q = deque()
visited[r][c] = True
q.append((r,c))
while q:
r,c= q.popleft()
for k in range(4):
nr = r + dir[k][0]
nc = c + dir[k][1]
if 0<=nr<N and 0<=nc<N and not visited[nr][nc] and arr[nr][nc] == arr[r][c]:
visited[nr][nc] = True
q.append((nr,nc))
return
N = int(input())
arr = [list(input()) for _ in range(N)]
visited = [[False] * (N) for _ in range(N)]
normal_cnt = abnormal_cnt = 0
#적록색약 X
for r in range(N):
for c in range(N):
if not visited[r][c]:
area(r,c)
normal_cnt += 1
#적록색약 O
for r in range(N):
for c in range(N):
if arr[r][c] == 'R':
arr[r][c] = 'G'
visited = [[False] * (N) for _ in range(N)]
for r in range(N):
for c in range(N):
if not visited[r][c]:
area(r,c)
abnormal_cnt += 1
print(normal_cnt, abnormal_cnt)