[๋ฐฑ์ค€-10026] ์ ๋ก์ƒ‰์•ฝ / Python

๐Ÿ“š Problem Solving/Baekjoon

 

10026๋ฒˆ: ์ ๋ก์ƒ‰์•ฝ

์ ๋ก์ƒ‰์•ฝ์€ ๋นจ๊ฐ„์ƒ‰๊ณผ ์ดˆ๋ก์ƒ‰์˜ ์ฐจ์ด๋ฅผ ๊ฑฐ์˜ ๋Š๋ผ์ง€ ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ, ์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ์€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๊ทธ๋ฆผ๊ณผ๋Š” ์ข€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ํฌ๊ธฐ๊ฐ€ N×N์ธ ๊ทธ๋ฆฌ๋“œ์˜ ๊ฐ ์นธ์— R(๋นจ๊ฐ•), G(์ดˆ๋ก)

www.acmicpc.net

import sys
from collections import deque

input = sys.stdin.readline
n = int(input())

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


def bfs(x, y, c, colorList):
    queue = deque()
    queue.append((x, y))
    colorList[x][y] = 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 colorList[nx][ny] != 0:
                if colorList[nx][ny] == c:
                    queue.append((nx, ny))
                    colorList[nx][ny] = 0


graph = [list(map(str, input().rstrip())) for _ in range(n)]
copy = [[0] * n for _ in range(n)]
for i in range(n):
    for j in range(n):
        if graph[i][j] == "R" or graph[i][j] == "G":
            copy[i][j] = 1
        else:
            copy[i][j] = 2

answer1 = 0
answer2 = 0
for i in range(n):
    for j in range(n):
        if graph[i][j] != 0:
            bfs(i, j, graph[i][j], graph)
            answer1 += 1
        if copy[i][j] != 0:
            bfs(i, j, copy[i][j], copy)
            answer2 += 1

print(answer1, answer2)

 

ํ•ด์„ค

์ ๋ก์ƒ‰์•ฝ์ธ ์‚ฌ๋žŒ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด์ฃผ๊ณ , R๊ณผ G๋ฅผ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ์น˜ํ™˜ํ•ด์ค€๋‹ค.

์ ๋ก์ƒ‰์–€์ธ ์‚ฌ๋žŒ, ์ ๋ก์ƒ‰์•ฝ์ด ์•„๋‹Œ ์‚ฌ๋žŒ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ๊ฐ bfs๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋!