๐ก ์กฐ๊ฑด
- ํฌ๊ธฐ๊ฐ RรC์ธ ๋ชฉ์ฅ์ด ์๊ณ , ๋ชฉ์ฅ์ 1ร1 ํฌ๊ธฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์๋ค.
- ๊ฐ๊ฐ์ ์นธ์๋ ๋น์ด์๊ฑฐ๋, ์ ๋๋ ๋๋๊ฐ ์๋ค. ์์ ์ด๋ํ์ง ์๊ณ ์์น๋ฅผ ์งํค๊ณ ์๊ณ , ๋๋๋ ์ธ์ ํ ์นธ์ ์์ ๋กญ๊ฒ ์ด๋ํ ์ ์๋ค.
๋ ์นธ์ด ์ธ์ ํ๋ค๋ ๊ฒ์ ๋ ์นธ์ด ๋ณ์ ๊ณต์ ํ๋ ๊ฒฝ์ฐ์ด๋ค.
- ๋ชฉ์ฅ์ ์ธํ๋ฆฌ๋ฅผ ์ค์นํด ๋๋๊ฐ ์์ด ์๋ ์นธ์ผ๋ก ๊ฐ ์ ์๊ฒ ํ๋ ค๊ณ ํ๋ค.
๋๋๋ ์ธํ๋ฆฌ๊ฐ ์๋ ์นธ์ผ๋ก๋ ์ด๋ํ ์ ์๋ค. ์ธํ๋ฆฌ๋ฅผ ์ค์นํด๋ณด์.
- ๋ชฉ์ฅ์ ํฌ๊ธฐ R, C๊ฐ ์ฃผ์ด์ง๋ค.
R๊ฐ์ ์ค์ ๋ชฉ์ฅ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. '.'๋ ๋น ์นธ, 'S'๋ ์, 'W'๋ ๋๋์ด๋ค.
1 โค R, C โค 500
- ๋๋๊ฐ ์์ด ์๋ ์นธ์ผ๋ก ๊ฐ ์ ์๊ฒ ํ ์ ์๋ค๋ฉด ์ฒซ์งธ ์ค์ 1์ ์ถ๋ ฅํ๊ณ , ๋์งธ ์ค๋ถํฐ R๊ฐ์ ์ค์ ๋ชฉ์ฅ์ ์ํ๋ฅผ ์ถ๋ ฅํ๋ค.
์ธํ๋ฆฌ๋ 'D'๋ก ์ถ๋ ฅํ๋ค. ์ธํ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ค์นํด๋ ๋๋๊ฐ ์์ด ์๋ ์นธ์ผ๋ก ๊ฐ ์ ์๋ค๋ฉด ์ฒซ์งธ ์ค์ 0์ ์ถ๋ ฅํ๋ค.
์ด ๋ฌธ์ ๋ ์ค์นํด์ผ ํ๋ ์ธํ๋ฆฌ์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๊ฐ ์๋๋ค.
- ์ ๋ ํน, ๊ตฌ์ฑ์ , ๊ทธ๋ํ ์ด๋ก ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from collections import deque
from sys import stdin
r, c = map(int, stdin.readline().split())
board = []
wolf = []
dx, dy = [1, 0, 0, -1], [0, 1, -1, 0]
for i in range(r):
data = list(stdin.readline().rstrip().replace('.', 'D'))
board.append(data)
for j in range(c):
if data[j] == 'W':
wolf.append((i, j))
def bfs(x, y):
q = deque()
q.append((x, y))
visited = set()
visited.add((x, y))
while q:
x, y = q.popleft()
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < r and 0 <= ny < c:
if (nx, ny) not in visited and board[nx][ny] != 'D' and board[nx][ny] != 'W':
if board[nx][ny] == 'S':
return False
else:
visited.add((nx, ny))
q.append((nx, ny))
return True
for x, y in wolf:
if not bfs(x, y):
print(0)
exit()
print(1)
for i in board:
print(*i, sep='')
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์ 1
5 5
.S...
...S.
S....
...S.
.S...
์คํ๊ฒฐ๊ณผ 1
1
.S...
...S.
S.D..
...S.
.S...
์์ 2
1 2
SW
์คํ๊ฒฐ๊ณผ 2
0
โจ๏ธ ๋ฌธ์ ํ์ด
- ์ด ๋ฌธ์ ๋ ๋
ธํธ์ ์ ํ์๋ฏ, ์ค์นํด์ผํ๋ ์ต์ ์ธํ๋ฆฌ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๊ฐ ์๋๋ค.
์ธํ๋ฆฌ๋ฅผ ์ค์นํด์ ๋๋๊ฐ ์์๊ฒ ์ ๊ทผํ ์ ์๋์ง์ ๋ํด์ ์์๋ณด๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๋๋๊ฐ ์์๊ฒ ์ ๊ทผํ ์ ์๋ค๋ฉด 0, ์๋ค๋ฉด 1์ ์ถ๋ ฅํ๊ณ
- ์ต์ ๋ช ๊ฐ์ ์ธํ๋ฆฌ๋ฅผ ์ค์นํด์ผํ๋์ง ์์๋ณด๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์, ์ธํ๋ฆฌ๋ฅผ ์ค์นํ ์ ์๋ ๋ชจ๋ ๊ณต๊ฐ์ ์ธํ๋ฆฌ๋ก ๋ฐ๊ฟ์ค๋ค.
- ๋งต ์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์ board์ ์
๋ ฅํ ๋, ํ ์ค๋ง๋ค ๋ฌธ์ W ๋ฅผ ๊ฒ์ํด ๋๋์ ์ขํ๋ฅผ wolf ๋ฆฌ์คํธ์ ์ ์ฅํด๋๋ค.
- wolf ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉด์ ํด๋น wolf ์ขํ์์ ์์๊ฒ ์ ๊ทผ์ ํ ์ ์์ผ๋ฉด retrun False๋ฅผ ํด์ฃผ๊ณ 0์ ์ถ๋ ฅํด์ค ๋ค, exit().
- return True ๋ผ๋ฉด 1์ ์ถ๋ ฅ ํ board ์ํ๋ฅผ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
๐พ ๋ฐฐ์ด์
- ๊ฐ์ฅ ์ค์ํ ํฌ์ธํธ๋ ์ต์ ๋ช ๊ฐ์ ์ธํ๋ฆฌ๋ฅผ ์ค์นํด์ผํ๋์ง ์์๋ณด๋ ๊ฒ์ด ์๋๋ค ๋ผ๋ ๊ฒ์ ์ค์ ์ ๋๊ณ ํ์ดํด์ ์ฝ๊ฒ ํ ์ ์์๋ค.