๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Silver1] 1303๋ฒˆ_์ „์Ÿ-์ „ํˆฌ

Dbswnstjd 2023. 2. 9. 16:21

๋ฌธ์ œ

https://www.acmicpc.net/problem/1303

 

1303๋ฒˆ: ์ „์Ÿ - ์ „ํˆฌ

์ฒซ์งธ ์ค„์—๋Š” ์ „์Ÿํ„ฐ์˜ ๊ฐ€๋กœ ํฌ๊ธฐ N, ์„ธ๋กœ ํฌ๊ธฐ M(1 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๊ทธ ๋‹ค์Œ ๋‘ ๋ฒˆ์งธ ์ค„์—์„œ M+1๋ฒˆ์งธ ์ค„์—๋Š” ๊ฐ๊ฐ (X, Y)์— ์žˆ๋Š” ๋ณ‘์‚ฌ๋“ค์˜ ์˜ท์ƒ‰์ด ๋„์–ด์“ฐ๊ธฐ ์—†์ด ์ฃผ์–ด์ง„๋‹ค. ๋ชจ๋“  ์ž๋ฆฌ์—๋Š”

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 1303๋ฒˆ ๋ฌธ์ œ - ์ „์Ÿ-์ „ํˆฌ
from collections import deque
dx, dy = [0,0,-1,1], [1,-1,0,0]
n, m = map(int, input().split())
graph = [list(input()) for i in range(m)]
visited = [[0]*n for j in range(m)]

def bfs(x, y, color):
    q = deque()
    q.append((x, y))
    visited[x][y] = 1
    cnt = 1
    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < m and 0 <= ny < n and not visited[nx][ny] and graph[nx][ny] == color:
                cnt += 1
                visited[nx][ny] = 1
                q.append((nx, ny))
    return cnt**2
white_cnt = 0
blue_cnt = 0
for i in range(m):
    for j in range(n):
        if not visited[i][j]:
            if graph[i][j] == 'W':
                white_cnt += bfs(i, j, 'W')
            else:
                blue_cnt += bfs(i, j, 'B')
print(white_cnt, blue_cnt)

์ด๋ฒˆ ๋ฌธ์ œ๋Š” BFS๋กœ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•œ ๋ฌธ์ œ์˜€๋‹ค.

์ฒ˜์Œ์˜ ์˜ค๋ฅ˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ์ˆœ๊ฐ„ cnt๋ฅผ 1๋กœ ๋‘์–ด์•ผ ํ•˜๋Š”๋ฐ 0์œผ๋กœ ๋‘์–ด์„œ ๊ฐ’์ด ๋‹ค๋ฅด๊ฒŒ ๋‚˜์™”๋‹ค.

์ด ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐ ํ›„์—๋„ ๊ณ„์† ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.

๊ฐ€๋กœ, ์„ธ๋กœ์˜ ์ธ๋ฑ์Šค ์„ค์ •์„ ์ž˜๋ชปํ•ด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋˜ ๊ฒƒ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ๊ณ  ์ธ๋ฑ์Šค๋ฅผ ์ž˜ ํ™•์ธํ•˜๋„๋ก ํ•ด์•ผ๊ฒ ๋‹ค.