๐Ÿค–/๋ฐฑ์ค€

๋ฐฑ์ค€ 1012: ์œ ๊ธฐ๋† ๋ฐฐ์ถ” (Python)

sssbin 2022. 1. 31. 22:53

 

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

 

1012๋ฒˆ: ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

์ฐจ์„ธ๋Œ€ ์˜๋†์ธ ํ•œ๋‚˜๋Š” ๊ฐ•์›๋„ ๊ณ ๋žญ์ง€์—์„œ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋†์•ฝ์„ ์“ฐ์ง€ ์•Š๊ณ  ๋ฐฐ์ถ”๋ฅผ ์žฌ๋ฐฐํ•˜๋ ค๋ฉด ๋ฐฐ์ถ”๋ฅผ ํ•ด์ถฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ๋‚˜๋Š” ํ•ด์ถฉ ๋ฐฉ์ง€์— 

www.acmicpc.net

 

pypy3๋กœ ์ œ์ถœํ•จ. ๋“œ๋””์–ด dfs์™€ bfs๊ฐ€ ์ต์ˆ™ํ•ด์กŒ๋”ฐ......!

 

# dfs

def dfs(x, y):
    if x < 0 or x >= m or y < 0 or y >= n:
        return False
    if list[y][x] == 1:
        list[y][x] = 0
        dfs(x+1, y)
        dfs(x-1, y)
        dfs(x, y+1)
        dfs(x, y-1)
        return True
    else:
        return False

t = int(input())
count = []

for i in range(t):
    m, n, k = map(int, input().split())
    list = [[0] * m for _ in range(n)]
    count.append(0)

    for j in range(k):
        x, y = map(int, input().split())
        list[y][x] = 1

    for a in range(n):
        for b in range(m):
            if dfs(b, a):
                count[i] += 1

for i in range(t):
    print(count[i])
# bfs

from collections import deque

def bfs(x, y):
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]
    queue = deque()

    if list[y][x] == 1:
        queue.append([y, x])
        list[y][x] = 0

        while queue:
            q1, q2 = queue.popleft()

            for i in range(4):
                mx = q2 + dx[i]
                my = q1 + dy[i]

                if mx < 0 or mx >= m or my < 0 or my >= n:
                    continue

                if list[my][mx] == 1:
                    queue.append([my, mx])
                    list[my][mx] = 0
        return True
    else:
        return False

t = int(input())
count = []

for i in range(t):
    m, n, k = map(int, input().split())
    list = [[0] * m for _ in range(n)]
    count.append(0)

    for j in range(k):
        x, y = map(int, input().split())
        list[y][x] = 1

    for a in range(n):
        for b in range(m):
            if bfs(b, a):
                count[i] += 1

for i in range(t):
    print(count[i])