์ง์ง ์ด ๋ฌธ์ ๋ญ๊น
์ด์ ๋ถํฐ ๋ ๊ณ ์์ํค๋ ๋ถ...์ด์ผ...
์์งํ ๋ฌธ์ ์์ฒด๋ ๋ณ๋ก ์ด๋ ต์ง ์์๋ค
๋ถ! ์ด๋ ๋๊ฐ๋ค
๊ทธ๋์ ์ฝ๋๋ฅผ ๋๊ฐ์ด ๋๋ค
๋ฐ๋!
๋ถ!์ด๋ ์ ํ ๋ค๋ฅธ ๊ฒ ์๋๋ฐ ์๊พธ 12%์์ ํฐ์ก๋ค
์ง๋ฌธ ๊ฒ์ํ์ ๋ค ๋ค์ ธ๋ด๋ ๋ด๊ฐ ๋์น ์กฐ๊ฑด์ด๋ ๊ณ ๋ ค์ฌํญ์ด ์ ํ ์๋๋ฐ๋ค๊ฐ ์ฌ์ง์ด ํ
์ผ๋ ๋ฐ๋ก๊น์ง ๋ค ๋ฃ์ด๋ ํ๋ฆฐ ๊ฑธ ์ฐพ์ ์๊ฐ ์์ด์ ๋ต๋ตํด ๋ฏธ์น ์ง๊ฒฝ์ด์๋๋ฐ
์ ํ๋ฆฐ ๊ทธ๋ฆผ ์ฐพ๊ธฐ ์์~!
์ ๊ฐ๋ฟ ๊ทธ๋ฅ ์ฝ๋๋ฅผ ์ฎ๊ธฐ๋ ๊ณผ์ ์์ time += 1 ๋ถ๋ถ์ด ์ง์์ ธ๋ฒ๋ ค์ ์ ๋๋ก ๋ time์ด ์ถ๋ ฅ๋์ง ์์ ๋๋ ์๋ฌ์๋ค
# 1792ms
def find_JF():
global J, F
for i in range(h):
for j in range(w):
if MAZE[i][j] == '*':
F.append((i, j))
elif MAZE[i][j] == '@':
J = [i, j]
def exodus(J, fq):
jr, jc = J
MAZE[jr][jc] == 'J' # ์งํ์ด๊ฐ ๋ฐฉ๋ฌธํ๋ ๊ณณ์ ๋ ๋ฐฉ๋ฌธํ์ง ์๋๋ก ํ๊ธฐ ์ํด์
jq = [(jr, jc)]
time = 1
# ์งํ์ด๊ฐ ์ด๋ํ ์ ์๋ ์ง์ญ์ด ์๋?
while jq:
# ๋ถ์ด ๋จผ์ ํ์ฐ๋๊ณ
l = len(fq)
for fr, fc in fq[:l]:
for nr, nc in (fr-1, fc), (fr+1, fc), (fr, fc-1), (fr, fc+1):
if nr<0 or nc<0 or nr>=h or nc>=w or MAZE[nr][nc] == '#':
continue
fq.append((nr, nc))
MAZE[nr][nc] = '#'
fq = fq[l:]
# ๋ถ๊ณผ ๋ฒฝ, ์ด๋ฏธ ์งํ์ด๊ฐ ๋ฐฉ๋ฌธํ ๊ณต๊ฐ์ ์ ์ธํ๊ณ ์งํ์ด๊ฐ ์ด๋ํ ์ ์๋ ๋ฐฉํฅ์ผ๋ก ํ์ฐ
# ๋ ๊ฐ ์ ์๋ ๊ณณ์ด ์๋ค๋ฉด ....
_l = len(jq)
for jr, jc in jq[:_l]:
for _nr, _nc in (jr+1, jc), (jr-1, jc), (jr, jc+1), (jr, jc-1):
if _nr<0 or _nc<0 or _nr>=h or _nc>=w:
return time
if MAZE[_nr][_nc] != '.':
continue
MAZE[_nr][_nc] = '@'
jq.append((_nr, _nc))
jq = jq[_l:]
time += 1
return 'IMPOSSIBLE'
for _ in range(int(input())):
w, h = map(int, input().split())
MAZE = [list(input()) for _ in range(h)]
J, F = [], []
find_JF()
print(exodus(J, F))
์ ๊ฑฐ ์ฐพ์ผ๋ ค๊ณ ์ด ๋ฌธ์ ๊ฐ ์ถ์ ๋ ๋ํ ์ฌ์ดํธ๊น์ง ๋ค์ด๊ฐ์ ์๋ฐฑ์ค์ ๋ฐ๋ก๊น์ง ๋ค์ด๋ฐ์์ ์
๋ ฅํด๋ดค๋ค
์ด๊ฑฐ ๋๋งค 30๋ถ ๋ ๋ฆผ ^^