์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ทธ๋ž˜ํ”„

[๋ฐฑ์ค€ 25552 ๐Ÿฅ‡] ์ž”๋”” ์˜ˆ์ธกํ•˜๊ธฐ

1eehyunji 2023. 9. 13. 01:40
 

๋ฌธ์ œ ํ’€์ด

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์ดํ•˜์—ฌ์•ผ ํ•œ๋‹ค.