[Boj문제풀이]

[Boj/백준] 10026 Python

ki7348 2021. 9. 23. 17:05

문제출처: https://www.acmicpc.net/problem/10026

 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net

 

 

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