|
1 | 1 | from collections import deque |
2 | 2 |
|
3 | | -# 2μ°¨μ λ°°μ΄μ μ΄μ©ν bfs ꡬν |
4 | | -def bfs(x, y): |
| 3 | +dx = [-1, 1, 0, 0] |
| 4 | +dy = [0, 0, -1, 1] |
5 | 5 |
|
6 | | - # 2μ°¨μ λ°°μ΄μμ νμ¬ λ
Έλμ μνμ’μ°λ₯Ό κ²μ¬νκΈ° μν dxμ dy |
7 | | - dx = [0, -1, 0, 1] |
8 | | - dy = [-1, 0, 1, 0] |
9 | 6 |
|
10 | | - # queueλ₯Ό μ΄μ©ν bfs κ·Έλν νμ |
11 | | - queue.append((x, y)) |
12 | | - visited[x][y] = 1 |
| 7 | +def bfs(graph, visited): |
| 8 | + border = 0 |
| 9 | + queue = deque() |
13 | 10 |
|
| 11 | + # μμ κ°μ κ³μ° |
| 12 | + for i in range(1, N + 1): |
| 13 | + for j in range(1, N + 1): |
| 14 | + # νμ¬ μΉΈμ μμ§ λ°©λ¬Ένμ§ μμλ€λ©΄ νμ¬ μΉΈλΆν° bfs νμ μμ |
| 15 | + if visited[i][j] == 0: |
| 16 | + # μμ κ°μ ν κ° μ¦κ° |
| 17 | + border += 1 |
| 18 | + queue.append((i, j)) |
14 | 19 |
|
15 | | - while queue: |
16 | | - (x, y) = queue.popleft() |
| 20 | + while queue: |
| 21 | + (x, y) = queue.popleft() |
| 22 | + # λ°©λ¬Έμ²λ¦¬ |
| 23 | + visited[x][y] = 1 |
17 | 24 |
|
18 | | - # queueμμ popν νμ¬ λ
Έλλ₯Ό κΈ°μ€μΌλ‘ μνμ’μ° νμ |
19 | | - for k in range(4): |
20 | | - row = x + dx[k] |
21 | | - col = y + dy[k] |
| 25 | + # μνμ’μ° μΈμ ν μΉΈμΌλ‘ μ΄λ |
| 26 | + for k in range(4): |
| 27 | + nx = x + dx[k] |
| 28 | + ny = y + dy[k] |
22 | 29 |
|
23 | | - # νμ 쑰건 |
24 | | - # 1. νμ¬ λ
Έλκ° λ°°μ΄μ μΈλ±μ€ λ²μ μμΈμ§ 0 <= x < n and 0 <= y < n |
25 | | - # 2. κ°μ μμΈμ§ |
26 | | - # 3. λ°©λ¬Ένμ§ μμλμ§ |
27 | | - if 0 <= row < n and 0 <= col < n: |
28 | | - if arr[x][y] == arr[row][col] and visited[row][col] == 0: |
29 | | - queue.append((row, col)) |
30 | | - visited[row][col] = 1 |
| 30 | + # μΉΈμ΄ λ³΄λ λ°μΌλ‘ λμ΄κ°μ§ μμλμ§,μΈμ ν μΉΈμ΄ κ°μ μμΈμ§,μμ§ λ°©λ¬Ένμ§ μμλμ§ νμΈ |
| 31 | + if (1 <= nx <= N and 1 <= ny <= N) and graph[x][y] == graph[nx][ny] and visited[nx][ny] == 0: |
| 32 | + # ν΄λΉ μΉΈ λ°©λ¬Έμ²λ¦¬ |
| 33 | + queue.append((nx, ny)) |
| 34 | + visited[nx][ny] = 1 |
31 | 35 |
|
| 36 | + return border |
32 | 37 |
|
33 | | -# μ΄κΈ°κ° μΈν
|
34 | | -n = int(input()) |
35 | | -visited = [[0] * n for _ in range(n)] |
36 | | -arr = [list(input()) for _ in range(n)] |
37 | | -queue = deque() |
38 | 38 |
|
39 | | -# μ λ‘μμ½μ΄ μλ κ²½μ°μ λ΅ |
40 | | -answerForNormal = 0 |
| 39 | +# μ
λ ₯λ°κΈ° |
| 40 | +N = int(input()) |
| 41 | +graph = [[0] * (N + 1)] |
| 42 | +visited = [[0] * (N + 1) for _ in range(N + 1)] |
41 | 43 |
|
42 | | -# μ λ‘μμ½μΈ κ²½μ°μ λ΅ |
43 | | -answerForColorBlindness = 0 |
| 44 | +for _ in range(N): |
| 45 | + graph.append([0] + list(input())) |
44 | 46 |
|
| 47 | +# μ μμΈμ΄ 보λ μμ κ°μ λ°ν |
| 48 | +num_of_normal = bfs(graph, visited) |
45 | 49 |
|
46 | | -# μ λ‘μμ½μ΄ μλ κ²½μ° |
47 | | -for i in range(n): |
48 | | - for j in range(n): |
49 | | - if visited[i][j] == 0: |
50 | | - bfs(i, j) |
51 | | - answerForNormal += 1 |
| 50 | +# μ λ‘μμ½μ΄ 보λ μμ κ°μ λ°ν μ λ‘μμ½μ R,Gλ₯Ό ꡬλΆνμ§ λͺ»νλ―λ‘ λͺ¨λ Rμ Gλ‘ λ³ν |
| 51 | +for i in range(1, N + 1): |
| 52 | + for j in range(1, N + 1): |
| 53 | + if graph[i][j] == 'R': |
| 54 | + graph[i][j] = 'G' |
52 | 55 |
|
| 56 | +visited = [[0] * (N + 1) for _ in range(N + 1)] |
| 57 | +num_of_abnormal = bfs(graph, visited) |
53 | 58 |
|
54 | | -# μ λ‘μμ½μΈ κ²½μ° Rκ³Ό Gλ κ°μΌλ―λ‘ |
55 | | - |
56 | | -for i in range(n): |
57 | | - for j in range(n): |
58 | | - if arr[i][j] == 'G': |
59 | | - arr[i][j] = 'R' |
60 | | - |
61 | | -visited = [[0] * n for _ in range(n)] |
62 | | -for i in range(n): |
63 | | - for j in range(n): |
64 | | - if not visited[i][j]: |
65 | | - bfs(i,j) |
66 | | - answerForColorBlindness += 1 |
67 | | - |
68 | | -print(answerForNormal, answerForColorBlindness) |
| 59 | +print(f"{num_of_normal} {num_of_abnormal}") |
0 commit comments