โ๋ฌธ์
https://www.acmicpc.net/problem/1012
๋ฉ๋ชจ๋ฆฌ: 114308 KB, ์๊ฐ: 132 ms
๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์, ๋๋น ์ฐ์ ํ์, ๊น์ด ์ฐ์ ํ์
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์ ํจ๊ณผ์ ์ธ ๋ฐฐ์ถํฐ์ง๋ ์ด๋ฅผ ๊ตฌ์ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค. ์ด ์ง๋ ์ด๋ ๋ฐฐ์ถ๊ทผ์ฒ์ ์์ํ๋ฉฐ ํด์ถฉ์ ์ก์ ๋จน์์ผ๋ก์จ ๋ฐฐ์ถ๋ฅผ ๋ณดํธํ๋ค. ํนํ, ์ด๋ค ๋ฐฐ์ถ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ผ๋ ์ด๊ณ ์์ผ๋ฉด ์ด ์ง๋ ์ด๋ ์ธ์ ํ ๋ค๋ฅธ ๋ฐฐ์ถ๋ก ์ด๋ํ ์ ์์ด, ๊ทธ ๋ฐฐ์ถ๋ค ์ญ์ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธ๋ฐ์ ์ ์๋ค. ํ ๋ฐฐ์ถ์ ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ ๋ค๋ฅธ ๋ฐฐ์ถ๊ฐ ์์นํ ๊ฒฝ์ฐ์ ์๋ก ์ธ์ ํด์๋ ๊ฒ์ด๋ค.
ํ๋๊ฐ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ๋ ์ ๊ณ ๋ฅด์ง ๋ชปํด์ ๋ฐฐ์ถ๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์ฌ์ด ๋์๋ค. ๋ฐฐ์ถ๋ค์ด ๋ชจ์ฌ์๋ ๊ณณ์๋ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ง ์์ผ๋ฉด ๋๋ฏ๋ก ์๋ก ์ธ์ ํด์๋ ๋ฐฐ์ถ๋ค์ด ๋ช ๊ตฐ๋ฐ์ ํผ์ ธ์๋์ง ์กฐ์ฌํ๋ฉด ์ด ๋ช ๋ง๋ฆฌ์ ์ง๋ ์ด๊ฐ ํ์ํ์ง ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ถ๋ฐญ์ด ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด ์ต์ 5๋ง๋ฆฌ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ์ํ๋ค. 0์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์์ง ์์ ๋ ์ด๊ณ , 1์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ๋ ์ ๋ํ๋ธ๋ค.
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 |
โ๐ปํ์ด
BFS์ DFS ์ค์ ๋ฌด์์ผ๋ก ํ์ง ๊ณ ๋ฏผํ๋๋ฐ ์ด์ ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ ๋ฌธ์ ๋ฅผ ํ์์ ๋ BFS๋ก ํ์๋ ๊ฒ ๋ ๊ฐ๋จํ๋ ๊ฒ ๊ฐ์ BFS๋ก ํ์๋ค.
visited ๋ฐฐ์ด์ ๋ฐ๋ก ๋๊ธฐ ๋ณด๋ค๋ graph์์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ์๋ ๋ ์ 0์ผ๋ก ๋ฐ๊ฟ์ ๋ฐฉ๋ฌธํ์์ ํ์ํด์ฃผ์๋ค. ์ํ์ข์ฐ๋ฅผ ๋ค ๋๋ฌ๋ณธ ํ ๋ ์ด์ ์ธ์ ํ ๋ฐฐ์ถ๊ฐ ์๋ค๋ฉด res[t]๋ฅผ 1 ์ฆ๊ฐํ๋ค.
๊ทธ๋ฌ๋ฉด ์ฒซ๋ฒ์งธ ํ ์คํธ ์ผ์ด์ค์๋ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ 5๋ง๋ฆฌ์ด๋ค.
๐ป์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
T = int(input())
res = [0] * T
for t in range(T):
M, N, K = map(int, input().split())
graph = [[0 for _ in range(N)] for _ in range(M)]
for _ in range(K):
x, y = map(int, input().split())
graph[x][y] = 1
def bfs(x, y):
q = deque()
q.append((x, y))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
while q:
cx, cy = q.popleft()
for i in range(4):
nx, ny = cx + dx[i], cy + dy[i]
if 0 <= nx < M and 0 <= ny < N and graph[nx][ny] == 1:
graph[nx][ny] = 0
q.append((nx, ny))
res[t] += 1
for x in range(M):
for y in range(N):
if graph[x][y] == 1:
bfs(x, y)
print(*res, sep='\n')
๐ํ๊ธฐ
์ด์ ํ์๋ ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ์ ๋น์ทํ ๋ฌธ์ ์ฌ์ ๋นจ๋ฆฌ ํ ์ ์์๋ค. ์ฌ์ฌ ๊ณจ๋ ๋ฌธ์ ๋ ํ์ด์ผ์ง..
2025.02.05 - [Coding Test/Algorithms] - [๋ฐฑ์ค] 2667. ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ/Python - Silver 1
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2667. ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ/Python - Silver 1 (0) | 2025.02.05 |
---|---|
[๋ฐฑ์ค] 24480. ์๊ณ ๋ฆฌ์ฆ ์์ - ๊น์ด ์ฐ์ ํ์ 2/Python - Silver 2 (0) | 2025.02.04 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํฐ ์ ๋ง๋ค๊ธฐ/Python - Lv.2 (0) | 2025.01.27 |
[๋ฐฑ์ค] 1753. ์ต๋จ๊ฒฝ๋ก/Python - ๊ณจ๋4 (0) | 2025.01.20 |
[๋ฐฑ์ค] 1449. ์๋ฆฌ๊ณต ํญ์น (0) | 2024.12.21 |