File tree Expand file tree Collapse file tree 1 file changed +68
-0
lines changed
Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Original file line number Diff line number Diff line change 1+ from collections import deque
2+
3+ # 2차원 배열을 이용한 bfs 구현
4+ def bfs (x , y ):
5+
6+ # 2차원 배열에서 현재 노드의 상하좌우를 검사하기 위한 dx와 dy
7+ dx = [0 , - 1 , 0 , 1 ]
8+ dy = [- 1 , 0 , 1 , 0 ]
9+
10+ # queue를 이용한 bfs 그래프 탐색
11+ queue .append ((x , y ))
12+ visited [x ][y ] = 1
13+
14+
15+ while queue :
16+ (x , y ) = queue .popleft ()
17+
18+ # queue에서 pop한 현재 노드를 기준으로 상하좌우 탐색
19+ for k in range (4 ):
20+ row = x + dx [k ]
21+ col = y + dy [k ]
22+
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
31+
32+
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+
39+ # 적록색약이 아닌 경우의 답
40+ answerForNormal = 0
41+
42+ # 적록색약인 경우의 답
43+ answerForColorBlindness = 0
44+
45+
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
52+
53+
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 )
You can’t perform that action at this time.
0 commit comments