|
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