본문 바로가기

프로그래밍

[백준 10026 파이썬] 적록색약

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 10026 적록색약
# BFS
# Python 112 ms
 
dx = [10-10]
dy = [010-1]
 
region1 = 0
region2 = 0
 
def bfs_rg(start):    #초록색과 빨간색을 같은 그룹으로 파악
    queue = [start]
    color = board1[start[0]][start[1]]
    if color =='R' or color=='G':
        col_lst = ['R''G']
 
    else:
        col_lst = ['B']
    board1[start[0]][start[1]] = 0
 
    while queue:
        pos = queue.pop()
        for i in range(4):
            nx = pos[0+ dx[i]
            ny = pos[1+ dy[i]
            if 0 <= nx and 0 <= ny and nx < n and ny < n and board1[nx][ny] in col_lst:
                board1[nx][ny] = 0
                queue.append((nx, ny))
 
 
 
def bfs_none(start):     # 세가지 색상 모두 다른 그룹
    queue =[start]
    color = board2[start[0]][start[1]]
    board2[start[0]][start[1]] = 0
 
 
    while queue:
        pos = queue.pop()
        for i in range(4):
            nx = pos[0+ dx[i]
            ny = pos[1+ dy[i]
            if 0<=nx and 0<=ny and nx<and ny <and board2[nx][ny] ==color:
 
                board2[nx][ny] = 0
                queue.append((nx,ny))
 
 
def solution():
    global region1, region2
 
    for i in range(n):
        for j in range(n):
            if board1[i][j] !=0:
                bfs_rg((i,j))
                region1 +=1
 
            if board2[i][j] !=0:
                bfs_none((i,j))
                region2 +=1
 
import copy
 
= int(input())
board1 = [list(input()) for _ in range(n)]
board2 = copy.deepcopy(board1)        # Board를 복사해서 사용
 
 
solution()
print(region2, region1)