https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
풀이
문제는 BFS로 풀어주었습니다. 정상인 사람과 적록색약 인 사람이 구분할 수 있는 영역의 개수를 출력하면 되는 문제입니다.
적록색약인 사람은 빨간색(R)과 녹색(G)이 구분되지 않기에 한가지의 색으로만 보입니다. 그래서 적록색약의 사람이 보는 그림의 색 중에서 R을 G로 바꾸어주었습니다. 문자열 메서드 중 하나인 replace() 메서드를 사용해주었습니다.
그 이후에는 BFS를 진행해주어서 한 영역을 탐색완료할 때마다 구역 개수를 추가해주었습니다
# 10026번 적록색약
import sys
from collections import deque
def bfs(graph):
ans = 0
visited = [[False] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if visited[i][j] == False:
ans += 1
queue = deque()
queue.append((j,i))
visited[i][j] = True
color = graph[i][j]
while queue:
x, y= queue.popleft()
for a in range(4):
nx = x + dx[a]
ny = y + dy[a]
if 0 <= nx < n and 0 <= ny < n:
if visited[ny][nx] == False and graph[ny][nx] == color:
visited[ny][nx] = True
queue.append((nx, ny))
return ans
# 좌표 이동 값
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
n = int(input())
# 정상인이 보는 그림
graph_normal = [sys.stdin.readline().rstrip() for _ in range(n)]
# 적록색약 사람이 보는 그림
graph_red_green = [i.replace("R","G") for i in graph_normal] # 문자열 replace함수를 사용
normal = bfs(graph_normal)
weak_eyes = bfs(graph_red_green)
print(f'{normal} {weak_eyes}')
출력결과
'백준 > DFS&BFS' 카테고리의 다른 글
[백준][Python] 16439번 소년 점프 - 코팩 (1) | 2022.09.09 |
---|---|
[백준] 7576번 토마토 - 파이썬 (0) | 2022.08.16 |
[백준] 2178번 미로 탐색 - 파이썬 (0) | 2022.03.13 |
[백준] 15650번 N과 M (2) - 파이썬 (0) | 2022.03.03 |
[백준] 15649번 N과 M (1) - 파이썬 (0) | 2022.03.03 |