문제출처: https://www.acmicpc.net/problem/10026
1. 문제 접근 방식
일반인은 R G B다르게 경우를 줘서 BFS로 돌렸고
적록색맹인은 R과 G는 R로 묶어서 B만 분리해서 BFS로 돌렸다.
이때 그래프를 두 개 생성하는데 두번째 그래프는 이중 for문을 돌면서 첫번째 그래프가 R이나 G일때 R로 초기화를 시켜줬다.
2. 내가 푼 코드
import sys
from collections import deque
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(person, x,y,color):
queue = deque()
queue.append((x,y))
person[x][y] = 0
while queue:
x, y = queue.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if nx < 0 or ny < 0 or nx>=n or ny>=n:
continue
if person[nx][ny] == color:
person[nx][ny] = 0
queue.append((nx,ny))
n = int(sys.stdin.readline())
count = 0
count2 = 0
graph = []
graph2 = [[0]*n for _ in range(n)]
for _ in range(n):
a = list(sys.stdin.readline().strip())
graph.append(a)
for i in range(n):
for j in range(n):
if graph[i][j] == 'R' or graph[i][j] == 'G':
graph2[i][j] = 'R'
else:
graph2[i][j] = 'B'
for i in range(n):
for j in range(n):
if graph[i][j] == 'R':
bfs(graph,i,j,'R')
count+=1
elif graph[i][j] == 'B':
bfs(graph,i,j,'B')
count+=1
elif graph[i][j] == 'G':
bfs(graph,i,j,'G')
count+=1
for i in range(n):
for j in range(n):
if graph2[i][j] == 'R':
bfs(graph2,i,j,'R')
count2+=1
elif graph2[i][j] == 'B':
bfs(graph2,i,j,'B')
count2+=1
result = []
result.append(count)
result.append(count2)
print(' '.join(map(str,result)))
3. 결과 및 느낀점
처음에 bfs 인자로 graph를 안줬다가 왜 자꾸 같이 초기화되지 생각했다...
bfs 함수의 인자를 더 알맞게 생각하고 주자(?)
'[Boj문제풀이]' 카테고리의 다른 글
[Boj/백준] 3187 Python (0) | 2021.09.24 |
---|---|
[Boj/백준] 14502 Python (0) | 2021.09.23 |
[Boj/백준] 2583 Python (0) | 2021.09.22 |
[Boj/백준] 14716 Python (0) | 2021.09.21 |
[Boj/백준] 2667 Python (0) | 2021.09.21 |