728x90
반응형
https://www.acmicpc.net/problem/10026
10026번: 적록색약
적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)
www.acmicpc.net
문제 해결
- 그래프를 만들어 구역을 나누는 개수를 세는 문제
- 적록색약인 사람은 'R' 과 'G'를 같은 색으로 본다.
- bfs()를 이용하면 금방 풀 수 있는 문제 (DFS도 좋지만 이렇게 이동하는 문제는 BFS가 편한 것 같습니다.)
- 사실 두 번 사용하는거 말고 다른 방법이 있나 생각을 해봤지만... 글쎄...?
CODE
import sys
from collections import deque
input = sys.stdin.readline
n = int(input())
graph = [[c for c in str(input().rstrip())] for _ in range(n)]
normal_visited = [[False for _ in range(n)] for _ in range(n)]
move = [(-1,0), (0,1), (0,-1), (1,0)]
def bfs(x,y):
que = deque()
que.append((x,y))
normal_visited[x][y] = True
while que:
r, c = que.popleft()
for next in move:
if 0<= r + next[0]<n and 0<= c+ next[1]<n:
if graph[r][c] == graph[r+next[0]][c+next[1]] and normal_visited[r+next[0]][c+next[1]] == False:
normal_visited[r+next[0]][c+next[1]] = True
que.append((r+next[0], c+next[1]))
ans_1= 0
abnormal_visited = [[False for _ in range(n)] for _ in range(n)]
ans_2 = 0
def sub_bfs(x,y):
que = deque()
que.append((x,y))
abnormal_visited[x][y] = True
while que:
r, c= que.popleft()
for next in move:
if 0<= r + next[0]<n and 0<= c+ next[1]<n:
if graph[r][c] in ['R','G'] and graph[r+next[0]][c+next[1]] in ['R','G'] and abnormal_visited[r+next[0]][c+next[1]] == False:
abnormal_visited[r+next[0]][c+next[1]] = True
que.append((r+next[0], c+next[1]))
elif graph[r][c] == graph[r+next[0]][c+next[1]] and abnormal_visited[r+next[0]][c+next[1]] == False:
abnormal_visited[r+next[0]][c+next[1]] = True
que.append((r+next[0], c+next[1]))
for i in range(n):
for j in range(n):
if normal_visited[i][j] == False:
ans_1 += 1
bfs(i,j)
if abnormal_visited[i][j] == False:
ans_2 += 1
sub_bfs(i,j)
print(ans_1, ans_2)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2468 안전 영역 (0) | 2023.03.19 |
---|---|
[python] 백준 18310 안테나 (0) | 2023.03.18 |
[python] 백준 16194 카드 구매하기 2 (0) | 2023.03.18 |
[python] 백준 9625 BABBA (0) | 2023.03.17 |
[python] 백준 10775 공항 (0) | 2023.03.17 |
댓글