๐ ๋ฌธ์
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค. ๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์ ํจ๊ณผ์ ์ธ ๋ฐฐ์ถํฐ์ง๋ ์ด๋ฅผ ๊ตฌ์ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค. ์ด ์ง๋ ์ด๋ ๋ฐฐ์ถ๊ทผ์ฒ์ ์์ํ๋ฉฐ ํด์ถฉ์ ์ก์ ๋จน์์ผ๋ก์จ ๋ฐฐ์ถ๋ฅผ ๋ณดํธํ๋ค. ํนํ, ์ด๋ค ๋ฐฐ์ถ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ผ๋ ์ด๊ณ ์์ผ๋ฉด ์ด ์ง๋ ์ด๋ ์ธ์ ํ ๋ค๋ฅธ ๋ฐฐ์ถ๋ก ์ด๋ํ ์ ์์ด, ๊ทธ ๋ฐฐ์ถ๋ค ์ญ์ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธ๋ฐ์ ์ ์๋ค. ํ ๋ฐฐ์ถ์ ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ ๋ค๋ฅธ ๋ฐฐ์ถ๊ฐ ์์นํ ๊ฒฝ์ฐ์ ์๋ก ์ธ์ ํด์๋ ๊ฒ์ด๋ค.
ํ๋๊ฐ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ๋ ์ ๊ณ ๋ฅด์ง ๋ชปํด์ ๋ฐฐ์ถ๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์ฌ์ด ๋์๋ค. ๋ฐฐ์ถ๋ค์ด ๋ชจ์ฌ์๋ ๊ณณ์๋ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ง ์์ผ๋ฉด ๋๋ฏ๋ก ์๋ก ์ธ์ ํด์๋ ๋ฐฐ์ถ๋ค์ด ๋ช ๊ตฐ๋ฐ์ ํผ์ ธ์๋์ง ์กฐ์ฌํ๋ฉด ์ด ๋ช ๋ง๋ฆฌ์ ์ง๋ ์ด๊ฐ ํ์ํ์ง ์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฐฐ์ถ๋ฐญ์ด ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด ์ต์ 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 |
๐์ ๋ ฅ
์ ๋ ฅ์ ์ฒซ ์ค์๋ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์ T๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ ์ค๋ถํฐ ๊ฐ๊ฐ์ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ์ฒซ์งธ ์ค์๋ ๋ฐฐ์ถ๋ฅผ ์ฌ์ ๋ฐฐ์ถ๋ฐญ์ ๊ฐ๋ก๊ธธ์ด M(1 ≤ M ≤ 50)๊ณผ ์ธ๋ก๊ธธ์ด N(1 ≤ N ≤ 50), ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ์์น์ ๊ฐ์ K(1 ≤ K ≤ 2500)์ด ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ K์ค์๋ ๋ฐฐ์ถ์ ์์น X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)๊ฐ ์ฃผ์ด์ง๋ค. ๋ ๋ฐฐ์ถ์ ์์น๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ ์๋ค.
๐์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ์ํ ์ต์์ ๋ฐฐ์ถํฐ์ง๋ ์ด ๋ง๋ฆฌ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํด์
๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋ ์ฐ๊ฒฐ๋์ด ์๋ ์์์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค. ์ฌ๊ธฐ์ ์ฐ๊ฒฐ์ ์ ์๋ ์ํ์ข์ฐ๋ก ์ด์ํ์ฌ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐ ํ์ด
๊ทธ๋ํ ํ๋ํ๋ ํ์์ ์์ํ ๊ฒ์ด๋ค. ๋ง์ฝ 1์ด๋ฉด ๋ฐฐ์ถ๊ฐ ์๋ ๊ณณ์ ์๋ฏธํ๋๊น ๊ทธ ์์น์์ BFS๋ฅผ ๋๋ ค ์ํ์ข์ฐ ์ฌ๊ท ํ์์ ์์ํ๋ค. ๊ทธ๋ ๊ฒ ํ์ํ ๊ณต๊ฐ๋ค์ ์ ๋ถ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ (์ฌ๊ธฐ์๋ ๋ค์ 0์ผ๋ก ํํ) ํด์ค๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด์, 1์ผ ๋ return True ํด์ฃผ๋ฉด ์ฐ๊ฒฐ๋์ด ์๋ ์์์ ๊ฐฏ์๋ฅผ ํ์ ํ ์ ์๋ค.
๐ป ์ฝ๋
import sys
input = sys.stdin.readline
sys.setrecursionlimit(3000) # ์ฌ๊ท์ ํ ํ์ฅ
def dfs(x,y):
if x <= -1 or x >=n or y <= -1 or y >= m: # ๋ฒ์์ ๋ฒ์ด๋๋ค๋ฉด ์ ์ธ
return False
if bat[x][y] == 1: # ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ง ๋ถ๋ถ์ด๋ผ๋ฉด
bat[x][y] = 0 # ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
# ์ํ์ข์ฐ๋ก ํ์
dfs(x-1, y)
dfs(x, y-1)
dfs(x+1,y)
dfs(x,y+1)
return True
return False
for i in range(int(input().rstrip())):
m, n, k = map(int, input().rstrip().split()) # ๋ฐฐ์ถ๋ฐญ์ ๊ฐ๋ก๊ธธ์ด, ์ธ๋ก๊ธธ์ด, ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ถ๊ฐฏ์
bat = [[0 for u in range(m)] for o in range(n)] # ๊ทธ๋ํ
for j in range(k):
x, y = map(int, input().rstrip().split())
bat[y][x] = 1 # ๋ฐฐ์ถ์ฌ๊ธฐ
result = 0
for q in range(n):
for w in range(m):
if dfs(q,w)== True: # ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ง ๊ณณ์ด๋ผ๋ฉด ์ฌ๋ฐฉํ๋ฐฉ ๋ค์ง
result += 1
print(result)
๐ ๋ฌธ์ ๋งํฌ : ์ ๊ธฐ๋ ๋ฐฐ์ถ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2448๋ฒ: ๋ณ์ฐ๊ธฐ - ํ์ด์ฌ (0) | 2022.06.06 |
---|---|
[๋ฐฑ์ค] 14494๋ฒ: ๋ค์ด๋๋ฏน์ด ๋ญ์์? - ํ์ด์ฌ (0) | 2022.06.05 |
[๋ฐฑ์ค] 1697๋ฒ: ์จ๋ฐ๊ผญ์ง - ํ์ด์ฌ (0) | 2022.06.02 |
[๋ฐฑ์ค] 2775๋ฒ: ๋ถ๋ ํ์ฅ์ด ๋ ํ ์ผ - ํ์ด์ฌ (0) | 2022.06.02 |
[๋ฐฑ์ค] 5014๋ฒ: ์คํํธ๋งํฌ - ํ์ด์ฌ (0) | 2022.06.01 |