글 작성자: 망고좋아
반응형

10026, 적록색약

📁 문제 출처

 

10026번: 적록색약

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

www.acmicpc.net

 

💡 생각

  • graph를 입력받고 G를 R로 모두 바꿔주는 새로운 배열을 만들어준다.
  • graph[i][j] in 'RGB'면 bfs함수 실행하면서 count 해주기

 

🛠 나의 코드

from collections import deque

n = int(input())

graph = []
graph_red = [['0'] * n for i in range(n)]

for i in range(n):
    graph.append(list(input()))

for i in range(n):
    for j in range(n):
        if graph[i][j] == 'G':
            graph_red[i][j] = 'R'
        else:
            graph_red[i][j] = graph[i][j]

dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]

def bfs(a, b, graph, color):
    queue = deque()
    queue.append((a, b))
    graph[a][b] = '0'

    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]

            if 0 <= nx < n and 0 <= ny < n and graph[nx][ny] == color:
                graph[nx][ny] = '0'
                queue.append((nx, ny))

cnt = 0
cntRed = 0
for i in range(n):
    for j in range(n):
        if graph[i][j] in 'RGB':
            bfs(i, j, graph, graph[i][j])
            cnt += 1

        if graph_red[i][j] in 'RB':
            bfs(i, j, graph_red, graph_red[i][j])
            cntRed += 1

print(cnt, cntRed)

 

✔️ 배운 점 및 주의할 점

  • 적록색약은 골드인데 직전에 풀었던 실버1-안전영역(2468) 문제보다 쉬웠다.
  • 오히려 2468번이 더더더 어려웠다. 다른 사람도 나와 비슷한 느낌인지 정답률 보면 적록색약은 57퍼고 안전영역은 34퍼이다.
반응형