๋ฌธ์
https://www.acmicpc.net/problem/1012
์ฝ๋
from collections import deque
T = int(input())
for _ in range(T):
n, m, k = map(int, input().split()) # ๊ฐ๋ก, ์ธ๋ก, ๋ฐฐ์ถ๊ฐ์
field = [[0 for _ in range(n)] for _ in range(m)]
visit = [[False for _ in range(n)] for _ in range(m)]
answer = 0
# ๋ฐฐ์ถ ์ง๋ ๊ทธ๋ฆฌ๊ธฐ
for l in range(k):
x, y = map(int, input().split())
field[y][x] = 1
for i in range(m): # ์ธ๋ก
for j in range(n): # ๊ฐ๋ก
if field[i][j] == 1 and not visit[i][j]:
answer += 1
# BFS ์์
q = deque()
q.append([j, i])
visit[i][j] = True
while q:
ex, ey = q.popleft()
# 4๋ฐฉํฅ ํ์
for dx, dy in ([0, 1], [1, 0], [-1, 0], [0, -1]): # ํ, ์ฐ, ์ข, ์
nx = ex + dx
ny = ey + dy
if 0 <= nx < n and 0 <= ny < m: # ๋ฒ์๋ด ์ด๊ณ
if field[ny][nx] == 1: # ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ์๊ณ
if not visit[ny][nx]: # ๋ฐฉ๋ฌธํ์ ์์ผ๋ฉด
q.append([nx, ny])
visit[ny][nx] = True
print(answer)
ํ์ด
n, m, k = map(int, input().split()) # ๊ฐ๋ก, ์ธ๋ก, ๋ฐฐ์ถ๊ฐ์
field = [[0 for _ in range(n)] for _ in range(m)]
visit = [[False for _ in range(n)] for _ in range(m)]
answer = 0
# ๋ฐฐ์ถ ์ง๋ ๊ทธ๋ฆฌ๊ธฐ
for l in range(k):
x, y = map(int, input().split())
field[y][x] = 1
filed๋ ๋ฐฐ์ถ๋ฐญ์ด๋ค.
๋ฐฐ์ถ๋ฅผ ํ๋๋ ์ฌ์ง ์์ ์ํ๋ก ์ด๊ธฐํ ํ๊ธฐ์ํด ๋ชจ๋ 0์ผ๋ก ์ฑ์์ง ๋ฐฐ์ด์ ๋ง๋ ๋ค.
visit๋ ํด๋น ์ขํ๋ฅผ ๋ฐฉ๋ฌธํ๋์ง ์ํ๋์ง ์์๋ณด๋ ์ขํ๋ค.
์์ง ์๋ฌด๊ณณ๋ ๋ฐฉ๋ฌธํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ False๋ก ์ฑ์์ง ๋ฐฐ์ด์ ๋ง๋ ๋ค.
answer์ ์ ๋ต์ด ๋ ์ง๋ ์ด์ ๊ฐ์๋ค.
๋ฐฐ์ถ์ ๊ฐ์๋งํผ x์ y์ ์ขํ๋ฅผ ๋ฐ์์ filed ๋ฐฐ์ด์ ๋ฐฐ์ถ ์ฌ์๊ณณ์ ์ขํ๋ฅผ 1๋ก ๋ฐ๊ฟ์ค๋ค.
๋ฐ๋ผ์ filed ๋ฐฐ์ด์ 0์ ๋ฐฐ์ถ๋ฅผ ์ฌ์ง ์์๊ณณ์ด๊ณ , 1์ ๋ฐฐ์ถ๋ฅผ ์ฌ์๊ณณ์ด ๋๋ค.
for i in range(m): # ์ธ๋ก
for j in range(n): # ๊ฐ๋ก
if field[i][j] == 1 and not visit[i][j]:
answer += 1
filed์ ๋ชจ๋ ์ขํ๋ฅผ ์์๋๋ก ๋๋ฉด์
๋ง์ฝ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ๊ณณ์ด๊ณ ์์ง ๋ฐฉ๋ฌธํ์ ์๋ ๊ณณ์ด๋ผ๋ฉด
์ง๋ ์ด๋ฅผ ํ๋ ํ์ด answer์ 1์ ๋ํ๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ BFS ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ์ธ์ ํด ์๋ ๋ฐฐ์ถ๋ค์ ๋ชจ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํด์ค๊ฒ์ด๋ค.
# BFS ์์
q = deque()
q.append([j, i])
visit[i][j] = True
๋จผ์ ํ๋ฅผ ํ๋ ์์ฑํ๋ค.
ํ์ ์ง๊ธ ๋ฐฉ๋ฌธํ๊ณณ์ ์ขํ๋ฅผ ๋ฃ๊ณ
visit ๋ฐฐ์ด์ ์ง๊ธ ๋ฐฉ๋ฌธํ๊ณณ์ ์ขํ๋ True๋ก ๋ฐ๊ฟ์ ๋ฐฉ๋ฌธํ๋ค๊ณ ํ๊ธฐํด์ค๋ค.
while q:
ex, ey = q.popleft()
# 4๋ฐฉํฅ ํ์
for dx, dy in ([0, 1], [1, 0], [-1, 0], [0, -1]): # ํ, ์ฐ, ์ข, ์
nx = ex + dx
ny = ey + dy
if 0 <= nx < n and 0 <= ny < m: # ๋ฒ์๋ด ์ด๊ณ
if field[ny][nx] == 1: # ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ์๊ณ
if not visit[ny][nx]: # ๋ฐฉ๋ฌธํ์ ์์ผ๋ฉด
q.append([nx, ny])
visit[ny][nx] = True
ํ๊ฐ ๋น์ด์๋ ์ํ๊ฐ ๋ ๋๊น์ง ๋ค์์ ์์ ์ ๊ณ์ ๋ฐ๋ณตํ๋ค. (๋ฐฉ๋ฌธํ ์ธ์ ํ ๋ฐฐ์ถ๊ฐ ๋์ด์ ์์๋ ํ๊ฐ ๋น๊ฒ ๋ ๊ฒ์ด๋ค)
ํ์ ๋งจ ์ผ์ชฝ ์์๋ฅผ ๊บผ๋ด์ ๊ฐ๊ฐ์ ex, ey ๋ณ์์ ๋ฃ์ด์ค๋ค.
ex๋ ํ์ฌ x์ขํ์ด๊ณ ey๋ ํ์ฌ y์ขํ๋ฅผ ์๋ฏธํ๋ค.
๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ํ์ฌ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก 4๋ฐฉํฅ ํ์์ ์งํํ๋ค. dx๋ x์ขํ ๋ณํ๋, dy๋ y์ขํ ๋ณํ๋์ ์๋ฏธํ๋ค. ๋ค ๋ฐฉํฅ ๊ฐ๊ฐ์ ๋ํด ๋ค์์ ์์ ์ ์ํํ๋ค.
nx๋ ์ฌ๋ฐฉํฅ ํ์์ผ๋ก ํ์๋ ๋ค์ x์ขํ๋ผ๋ ์๋ฏธ๋ค. nx๋ณ์์ ํ์ฌ x์ขํ์ x์ขํ ๋ณํ๋ ๋งํผ์ ๋ํด์ค๋ค.
ny๋ ์ฌ๋ฐฉํฅ ํ์์ผ๋ก ํ์๋ ๋ค์ y์ขํ๋ผ๋ ์๋ฏธ๋ค. ny๋ณ์์ ํ์ฌ y์ขํ์ y์ขํ ๋ณํ๋ ๋งํผ์ ๋ํด์ค๋ค.
๋ง์ฝ nx์ ny๊ฐ filed๋ด์ ๋ฒ์์ด๊ณ
nx, ny ์ขํ์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๊ณ
nx, ny ์ขํ์ ๋ฐฉ๋ฌธํ์ ์ด ์์ผ๋ฉด
ํ์ nx, ny๋ฅผ ๋ฃ์ด์ฃผ๊ณ
nx, ny์ขํ๋ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ๋ค.
'์ฝ๋ฉํ ์คํธ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1927. ์ต์ ํ & 11279. ์ต๋ ํ (0) | 2024.07.31 |
---|---|
[๋ฐฑ์ค] 14888. ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (2) | 2024.07.14 |
[๋ฆฟ์ฝ๋] Reduce Array Size To The Half (0) | 2024.06.27 |
[๋ฆฟ์ฝ๋] Seat Reservation Manager (0) | 2024.06.26 |
[๋ฆฟ์ฝ๋] Minimum Add to Make Parentheses Valis (0) | 2024.06.25 |