https://www.acmicpc.net/problem/1012
1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์
www.acmicpc.net
| ๋ฌธ์ ๋ด์ฉ
| ํ์ด
์ธ์ ํ ์์น๋ฅผ ํ์ํด์ผ ํ๋ ๋ฌธ์ ๋ผ์ BFS ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
์ฒ์์๋ ์๊ฐ ์ด๊ณผ ๋ฌธ์ ๊ฐ ์์๋๋ฐ,
์ฒซ ๋ฒ์งธ ์์ธ์ ํ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ๋๋ง ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ค. ์ด๋ก ์ธํด ์์ง ๋ฐฉ๋ฌธํ์ง ์์์ง๋ง ์ด๋ฏธ ํ์ ์ถ๊ฐ๋ ์์น ๊ฐ๋ค์ด ์ค๋ณต์ผ๋ก ๋ค์ด๊ฐ๋ ๋ฌธ์ ๊ฐ ์์๋ค. ๋ฐ๋ผ์ ํ์ ์์น ๊ฐ์ ์ถ๊ฐํ ๋ ๋ฐฉ๋ฌธ ์ฒดํฌ๋ฅผ ํด์ฃผ์ด์ผ ์ค๋ณต ํ์ธ์์ด ํ์ํ ์ ์๋ค.
๋ ๋ฒ์งธ ์์ธ์ ๊ฐ์ด 1์ธ ๋ฐฐ์ถ๋ค์ ์ฐพ๋ ๊ณผ์ ์ BFS ๋ด์์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ๋ ๊ฒ์ด๋ค. BFS ๋ด์ ์์ฑ ์ ํ์์ ์๋ฃํ ํ์ ๋ฐฐ์ด์ ์ฒ์ ์์น๋ถํฐ ๋ค์ ํ์ํด์ผ ํ๋ฏ๋ก, BFS ํจ์ ๋ฐ์์ ์ฒดํฌ๋ฅผ ํด์ผ ํ๋ค.
import sys
input = sys.stdin.readline
def put_cabbage(ground, K):
for _ in range(K):
m, n = map(int, input().split())
ground[n][m] = 1
def find_bug_by_bfs(i, j):
queue = [(i, j)]
# ํ์ฌ ์์น๋ก๋ถํฐ ๋์๋จ๋ถ์ผ๋ก ์์นํ ์ธ์ ์ขํ ํ์ธ
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
while queue:
x, y = queue.pop(0)
ground[x][y] = 2 # ๋ฐฐ์ถ๊ฐ ์์ผ๋ฉด 0, ์์ผ๋ฉด 1, ๋ฐฉ๋ฌธํ ๊ณณ์ด๋ฉด 2
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# ๋ฐ์ด๋๋ฆฌ ์์ ์๊ณ ํ์ธํ์ง ์์ ๋ฐฐ์ถ์ธ์ง ์ฒดํฌ
if (0 <= nx <= N - 1 and 0 <= ny <= M - 1) and ground[nx][ny] == 1:
ground[nx][ny] = 2 # ํ์ ๋ฃ์ ๋ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํด์ ์ค๋ณต ์ถ๊ฐ ๋ฐฉ์ง
queue.append((nx, ny))
T = int(input())
for i in range(T):
cnt = 0
M, N, K = map(int, input().split())
# 2์ฐจ์ ๋ฐฐ์ด ๋ง๋ค๊ธฐ
ground = [[0 for _ in range(M)] for _ in range(N)]
# ๋ฐฐ์ถ ์์นํ ๊ณณ ๊ฐ์ 1๋ก ๋ณ๊ฒฝ
put_cabbage(ground, K)
# BFS๋ก ์ธ์ ๋ฐฐ์ถ๋ค ํ์ธ
for i in range(N):
for j in range(M):
if ground[i][j] == 1:
find_bug_by_bfs(i, j)
cnt += 1
# ๋ต ์ถ๋ ฅ
print(cnt)
'์๊ณ ๋ฆฌ์ฆ > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 2178๋ฒ ๋ฏธ๋กํ์ (0) | 2023.10.07 |
---|---|
[Python] ๋ฐฑ์ค 1475๋ฒ ๋ฐฉ ๋ฒํธ (0) | 2023.10.06 |
[Python] ๋ฐฑ์ค 1509๋ฒ ํฐ๋ฆฐ๋๋กฌ ๋ถํ (1) | 2023.10.03 |
[Python] ๋ฐฑ์ค 15903๋ฒ ์นด๋ ํฉ์ฒด ๋์ด (0) | 2023.04.30 |
[Python] ๋ฐฑ์ค 11286๋ฒ ์ ๋๊ฐ ํ (0) | 2023.04.30 |