ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿšฉ ๊ทธ๋ž˜ํ”„, BFS

 

thinking

ํ๋ฅผ ๋งŒ๋“ ๋‹ค์Œ, ์‚ฌ๋ฐฉ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์•„์ง ๋ฐฉ๋ฌธ ์•ˆํ–ˆ๊ณ (==์ƒ‰๊น” ํ™•์ธ ์•ˆํ–ˆ๊ณ ) ๊ฐ™์€ ์ƒ‰์ธ ๊ฒฝ์šฐ ๋ฐฉ๋ฌธ์ฒดํฌ ํ›„ ํ์— ๋„ฃ์—ˆ๋‹ค.

์ ๋ก์ƒ‰์•ฝ์ธ ๊ฒฝ์šฐ๋Š” R๊ณผ G๊ฐ€ ๊ฐ™์œผ๋ฏ€๋กœ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿฌ๋กœ ํ†ต์ผ ์‹œํ‚จ๋‹ค์Œ BFS๊ณผ์ •์„ ๋˜‘๊ฐ™์ด ๋ฐ˜๋ณตํ–ˆ๋‹ค.

N์ด 100๊นŒ์ง€๋ผ ์ด์ค‘ for๋ฌธ ์—ฌ๋Ÿฌ๋ฒˆ ๋Œ๋ ค๋„ ์ƒ์ˆ˜*N*N= c*10000 ๋ฐ–์— ์•ˆ๋˜์„œ ์‹œ๊ฐ„์ดˆ๊ณผ ๋…ธ๊ฑฑ์ •

 

์ฝ”๋“œ

from collections import deque

def BFS(x,y):
    q.append((x,y))
    dx = [-1,0,1,0]
    dy = [0,1,0,-1]
    visited[x][y] = 1
    while q:
        x, y = q.popleft()
        for d in range(4):
            nx = x + dx[d]
            ny = y + dy[d]
            # ์ธ๋ฑ์Šค ๋ฒ”์œ„ ์•ˆ์— ์žˆ์œผ๋ฉด์„œ, ๊ฐ™์€ ์ƒ‰์ด๋ฉด์„œ, ๋ฐฉ๋ฌธ ์•ˆํ•œ ๊ฒฝ์šฐ
            if 0<=nx<N and 0<=ny<N and a[nx][ny] == a[x][y] and not visited[nx][ny]:
                visited[nx][ny] = 1  # ๋ฐฉ๋ฌธ์ฒดํฌ ํ›„ ํ์— ๋„ฃ์Œ
                q.append((nx,ny))


N = int(input())
a = [list(input()) for _ in range(N)]
q = deque()

# ์ ๋ก์ƒ‰์•ฝ ์•„๋‹Œ ๊ฒฝ์šฐ
visited = [[0] * N for _ in range(N)]
cnt1 = 0
for i in range(N):
    for j in range(N):
        if not visited[i][j]:  # ์•„์ง ๋ฐฉ๋ฌธ ์•ˆํ•œ ๊ฒฝ์šฐ๋งŒ ์ฒดํ‚น
            BFS(i,j)
            cnt1 += 1

# ์ ๋ก์ƒ‰์•ฝ์ธ ๊ฒฝ์šฐ
for i in range(N):
    for j in range(N):
        if a[i][j] == 'G':
            a[i][j] = 'R'

visited = [[0] * N for _ in range(N)]
cnt2 = 0
for i in range(N):
    for j in range(N):
        if not visited[i][j]:
            BFS(i,j)
            cnt2 += 1

print(cnt1, cnt2)
๋Œ“๊ธ€