https://www.acmicpc.net/problem/25552
25552๋ฒ: ์๋ ์์ธกํ๊ธฐ
์ฒซ์งธ ์ค์ ์ง์ฌ๊ฐํ ๋ชจ์ ํ ์ง์ ํ๊ณผ ์ด์ ์ $N, M$์ด ์ฃผ์ด์ง๋ค. $(1 \leq N, M \leq 1\,000)$ ์ดํ ์ด๊ธฐ ์๋์ ์ํ๊ฐ $N$์ค์ ๊ฑธ์ณ ๊ฐ๊ฐ $M$์นธ์ฉ ์ฃผ์ด์ง๋ค. ์ดํ ์๋๊ฐ ํผ์ง ๋ฒ์ $D$๊ฐ ์ฃผ์ด์ง๋ค. $(1 \leq
www.acmicpc.net



๋ฌธ์ ํ์ด
import sys
from collections import deque
n,m=map(int, sys.stdin.readline().strip().split(' '))
present=[list(sys.stdin.readline().strip()) for _ in range(n)]
d=int(sys.stdin.readline())
future=[list(sys.stdin.readline().strip()) for _ in range(n)]
# future๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ธฐ์กด์ present์ ๋๋ฌํ ์ ์๋์ง ํ์ธ
queue=deque()
visited=[[0]*m for _ in range(n)]
def bfs_weed():
global queue, visited, future
while queue:
y,x=queue.popleft()
for dy in range(y-d, y+d+1):
for dx in range(x-d, x+d+1):
if 0 <= dy < n and 0 <= dx < m and visited[dy][dx] == 0 and future[dy][dx] == 'O' and abs(y-dy)+abs(x-dx)<=d:
queue.append((dy, dx))
visited[dy][dx] = 1
for i in range(n):
for j in range(m):
if present[i][j]=='O' and visited[i][j]==0:
queue.append((i,j))
visited[i][j]=1
bfs_weed()
for i in range(n):
for j in range(m):
if (future[i][j]=='O' and visited[i][j]==0) or (future[i][j]=='X' and present[i][j]=='O'):
print('NO')
sys.exit(0)
print('YES')
- ๋ฌธ์ ํ์ด ์์ด๋์ด๊ฐ ์ค์ํ๋ค!
- ์ฐ์ ๊ธฐ์กด ์๋ ์ํ์์ ์์ธก ์๋ ์ํ๋ก ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ๋ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
- ์ฒซ ๋ฒ์งธ๋ก, ์์ธก ์๋ ์ํ๊ฐ X์ธ๋ฐ, ๊ธฐ์กด ์๋ ์ํ๊ฐ O์ธ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅํ๋ค. ์๋ํ๋ฉด ๊ธฐ์กด์ ์๋ ์๋๊ฐ ์ฌ๋ผ์ง ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ ๋ฒ์งธ๋ก, ๊ธฐ์กด ์๋ ์ํ๊ฐ O์ธ ์์น์์(์ฆ,์๋๊ฐ ์์นํ๋ ๊ณณ)์์ ์ํ์ข์ฐ๋ก D ๋ด๋ก ์์ง์ผ ์ ์์น(์์ธก ์๋ ๋ฐฐ์ด์ ์์น๊ฐ O์ด์ด์ผ ํจ)๋ฅผ BFS๋ฅผ ํตํด์ ๋ชจ๋ ํ์ํ ๊ฒฐ๊ณผ์ธ Visited ๋ฐฐ์ด์์ ์์ธก ์๋์์ ์๋๊ฐ ์๋ค๊ณ ํ์๋์ด ์์ง๋ง, Visited ๋ฐฐ์ด์ 0์ธ, ์ฆ ๋๋ฌํ ์ ์๋ ์์น์ ์๋๊ฐ ์๋ค๊ณ ์์ธกํ๋ ๊ฒฝ์ฐ์ด๋ค.
- ์ฌ๊ธฐ์ ์ค์ํ ์ ์ ์ํ์ข์ฐ๋ก D ๋ด๋ก ์์ง์ผ ์ ์๋ ์์น๋ฅผ ์ ์ํ๋ ๊ฒ์ธ๋ฐ, ํ์ฌ ์์น y,x๋ฅผ ๊ธฐ์ค์ผ๋ก (y-d~y+d, x-d~x+d)๋ฅผ ํ์ํ๋ฉด์ ํ์ฌ ์์น y์์ ์์ง์ผ ์์น dy์ ์ฐจ์ด์ธ abs(y-dy)์ ํ์ฌ ์์น x์์ ์์ง์ผ ์์น dx์ ์ฐจ์ด์ธ abs(x-dx)์ ํฉ์ด d์ดํ์ฌ์ผ ํ๋ค.
'์๊ณ ๋ฆฌ์ฆ > ๊ทธ๋ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 3980 ๐ฅ] ์ ๋ฐ ๋ช ๋จ (1) | 2023.10.07 |
---|---|
[๋ฐฑ์ค 2251 ๐ฅ] ๋ฌผํต (0) | 2023.09.24 |
[๋ฐฑ์ค 15900 ๐ฅ] ๋๋ฌด ํ์ถ (0) | 2023.09.02 |
[๋ฐฑ์ค 14888 ๐ฅ] ์ฐ์ฐ์ ๋ผ์๋ฃ๊ธฐ (1) | 2023.08.31 |
[๋ฐฑ์ค 1525 ๐ฅ] ํผ์ฆ (0) | 2023.08.28 |