2589๋ฒ - ๋ณด๋ฌผ์ฌ
W๋ ๋ฐ๋ค, L์ ๋๋ฅ์
๋๋ค.
๋๋ฅ์ ๋๊ณผ ๋์ (๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์ ๋ฐ ๋จผ ๊ณณ์) ๊ฐ๊ฐ ๋ณด๋ฌผ์ด ๋ฌปํ์๋๋ฐ ์ด ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ์ค ์ ์ผ ๊ธด ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ฉด ๋ฉ๋๋ค.
from collections import deque
import sys
import copy
input = sys.stdin.readline
์ ๊ฐ ์ธ ๋ฐฉ์์ ์ธ๋ฑ์ค ํ๋ํ๋ ๋ค BFS๋ฅผ ๋๋ฆฌ๊ณ deep copy ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ๊บผ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ๋ง์ด ๋ถ์กฑํฉ๋๋ค. python์์ ์๊ฐ๋ณต์ก๋๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ํ์ ์ธ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง๊ฐ ์์ฃ ? sysinput์ด๋ pypy3๋ก ์ปดํ์ผ ํ๊ฒ ์ต๋๋ค.
dx = [-1,1,0,0]
dy = [0,0,1,-1]
BFS ํญ์ ์ฌ์ฉํ ๋์ฒ๋ผ ์ํ์ข์ฐ ์ค์ ์ ํด์ค๋๋ค.
N,M = map(int,input().split())
map = []
que = deque()
for _ in range(N):
map.append(list(input()))
map_copy = copy.deepcopy(map)
ans = []
๋ณด๋ฌผ์ง๋์ ์ ๋ ฅ์ ๋ฐ์์ค์๋ค. map์ด๋ผ๋ ๋ณ์ ์์ ๋ฐ์์ฃผ๊ณ BFS๋ฅผ ํ๋ํ๋ ๋ค ๋๋ฆฌ๊ธฐ ์ํด์ map์ ๋ณต์ ํ map_copy๋ผ๋ ๋ณ์๋ ํ๋ ๋ง๋ค์ด์ฃผ๊ฒ ์ต๋๋ค.
for i in range(N):
for j in range(M):
ans.append(bfs(i,j))
map = copy.deepcopy(map_copy)
์๊น ๋ง์๋๋ฆฐ๋๋ก ๊ฐ ์ธ๋ฑ์ค๋ง๋ค bfs๋ฅผ ๋๋ฆฌ๊ณ map_copy๋ก ๋ณต์ ํ๊ฑธ ๋ค์ map ์์ ๋ฃ์ด์ ์ด๊ธฐํ ํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๊ฒ ์ต๋๋ค.
def bfs(x,y):
max = 0
boolean = False
que.append([x,y])
๋ณด๋ฌผ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์๋ฅผ ๋ด์ max ํจ์๋ฅผ ์ด๊ธฐํํ๊ณ boolean์ ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ์ํด์ ์ค์ ํด์ฃผ๊ฒ ์ต๋๋ค.
if map[x][y] == 'L':
map[x][y] = 1
์๊ธฐ์์ ์ด ๋ ์ด๋ผ๋ฉด 1๋ก ์ค์ ํด์ฃผ๊ฒ ์ต๋๋ค.
while que:
x,y = que.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx<0 or ny<0 or nx>=N or ny>=M:
continue
if map[nx][ny] == 'L' and map[x][y] != 'W':
boolean = True
map[nx][ny] = map[x][y] + 1
if max < map[nx][ny]:
max = map[nx][ny]
que.append([nx,ny])
์ํ์ข์ฐ ํ์์ ๋์์ ๋ค์ ๊ฒ์ด ๋
์ด๋ผ๋ฉด ์๊ธฐ์์ + 1์ ๊ธฐ์
ํด ๊ฑฐ๊ธฐ๊น์ง ๊ฐ๋ ๋ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธ๋ฑ์ค์ ๋์
ํด์ฃผ๊ฒ ์ต๋๋ค.
๋ง์ฝ ์๊ธฐ์์ +1์ด ์ฌํ ๋์จ ๊ฐ๋๋ฐ๊น์ง์ ๊ฑฐ๋ฆฌ ์ค ๊ฐ์ฅ ํฌ๋ค๋ฉด ๊ทธ๊ฒ ๊ณง ๋ณด๋ฌผ๊ณผ ๋ณด๋ฌผ ๊น์ง์ ๊ฑฐ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ max์ ๋ฃ๊ณ
if boolean == True:
return max
else:
return 1
์ด๋ ๊ฒ ์ถ๊ฐ์์ผ์ฃผ๊ฒ ์ต๋๋ค.
print(max(ans)-1)
๋ง์ง๋ง์ผ๋ก BFS๋ก ๋๋ฆฐ ๋ณด๋ฌผ๊ณผ ๋ณด๋ฌผ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ํ๋ณด๋ค ์ค ํ์ฌ ์์น๋ฅผ ์ ์ธํ ๊ฐ์ฅ ํฐ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
์๊น boolean ๊ฐ์ ์ค์ ํด์ ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ค๋ค๊ณ ์ธ๊ธํ์์ฃ ? ์ ๊ฐ ํ๊ฐ๋ ธ๋ ๋ ๊ฐ์ง ๋ฐ๋ก๋ฅผ ์๊ฐํฉ๋๋ค.
1 2
WL
๋จผ์ ์ด๋ฐ์ฉ์ผ๋ก ์์ฑ์ด ๋์ด์๋ค๋ฉด ํ์์ ์์ ์๋๊ธฐ ๋๋ฌธ์ max์ ์ด๊ธฐ๊ฐ 0์์ -1์ด ๋น ์ ธ๋ฒ๋ฆฐ -1๊ฐ์ด ๋์ถ๋๊ฒ ๋ฉ๋๋ค.
ํด๋น ๊ฐ์ 0์ผ๋ก ๋์ถํ๊ธฐ ์ํด์ ํ์์ ์์ ์๋์๋ค๋ฉด 1๋ก return ํ์ฌ 0์ด ์ถ๋ ฅ๋๊ฒ ์ ๋ํฉ์๋ค.
7 7
WLLLLLW
LWLWLWW
LLLWLWW
LWWWLWW
LLLLLWW
LWWWWWW
WWWWWWW
์ฒ์์ ์๊ฐํ๋ ์ฝ๋๋ ์ด๋ค ์ฉ์ด์๋๋ฉด
for i in range(M):
ans.append(bfs(N-1,i))
์์๊ฐ์ด ์ด? ๋งจ ์๋๋ง ํ์์ ๋์๋ ๋ณด๋ฌผ๋ผ๋ฆฌ์ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ์ด ๋์ถ๋๋๊ฑฐ ์๋๊ฐ? ํ๋๋ฐ
์ ๋ฐ๋ก๋ฅผ ๋ณด๋ฉด ๋ฌด์์ ์๋๋ง ๋ณธ๋ค๊ณ ํด์ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ์ด ๋์ค์ง๋ ์์ต๋๋ค.
ํ ๊ฐ์ง ๋ ์๋ฌธ์ด ๋ ๊ฒ์ ์ ๊ฐ ์ฝ๋ฉํ ์คํธ ์ค๋น๋ฅผ ์ํด PS๋ฅผ ํธ๋๊ฒ ์ฃผ๋ ๋ชฉ์ ์ธ๋ฐ ๊ธฐ์ ์์ pypy3๋ฅผ ์ปดํ์ผ๋ฌ๋ก ์ ๊ณตํด์ฃผ์ง๋ ์์ ๊ฒ ๊ฐ๊ณ ์ ์ค๋ ฅ์์ python3๋ก ์ฌ์ค์ ์๊ฐ์ด๊ณผ ๋๋ฌธ์ ํ๊ธฐ ํ๋ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์ด๊ฑธ pypy3๋ก๋ง ๋ง๋ฅ ํด๊ฒฐํด๋ ๊ด์ฐฎ์๊น? ํ๋๋ฐ
PyPy3๋ก ์ ์ถํ๋ฉด ํต๊ณผ๋ฉ๋๋ค.
๋ผ๋ ๊ฒ์๊ธ์ ๋ณด๊ณ ์์ฌํ ์ ์์์ต๋๋ค. pypy3๋ก ํต๊ณผ๋ ๋งํ ๋ฌธ์ ๋ฅผ python3๋ก ๋ชปํ์๋ค๊ณ ๊ธฐ์ ์์ ๊ฑฐ๋ฅผ ์ ๋์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ผ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์๋ค๊ณ ๋ด์ผํ ๊ฒ ๊ฐ์ต๋๋ค.