[백준 10026] 적록색약

Junyoung Park·2022년 3월 4일
0

코딩테스트

목록 보기
177/631
post-thumbnail

1. 문제 설명

적록색약

2. 문제 분석

그래프를 조건에 따라 두 개로 나눈다. 원본과 R=G를 동일하게 만든 그래프를 원본을 통해 하나 더 만들면 된다. 그리고 모든 노드를 돌면서 방문하지 않은 노드일 때 그 노드를 기준 색깔로 삼고 경계를 카운트하면 된다.

  • 연결 상태, 일종의 클러스터 개수를 물어보는 문제가 실버~골드 초기까지 좀 많은 것 같다.

3. 나의 풀이

import sys
from collections import deque

n = int(sys.stdin.readline().rstrip())
nodes = [[] for _ in range(n)]

for i in range(n):
    nodes[i] += sys.stdin.readline().rstrip()

nodes2 = [node[:] for node in nodes]
for i in range(n):
    for j in range(n):
        if nodes2[i][j] == 'G':
            nodes2[i][j] = 'R'
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]

def BFS(nodes):
    cnt = 0
    queue = deque()

    for i in range(n):
        for j in range(n):
            if nodes[i][j] != 'V':
                queue.append([i, j])
                base_color = nodes[i][j]
                nodes[i][j] = 'V'
                # visited의 V로 체크하고 이 큐에서 확인할 경계의 색깔을 정한다.
                while queue:
                    row, col = queue.popleft()

                    for x, y in zip(dx, dy):
                        next_row, next_col = row + x, col + y

                        if next_row < 0 or next_col < 0 or next_row >= n or next_col >= n: continue

                        if nodes[next_row][next_col] == base_color:
                            nodes[next_row][next_col] = 'V'
                            queue.append([next_row, next_col])
                cnt += 1
    return cnt




for local_nodes in (nodes, nodes2):
    print(BFS(local_nodes), end=' ')
profile
JUST DO IT

0개의 댓글