๊ณจ๋4 : ์์ ํ์ ๋ฌธ์ ์ด๋ค.
ํ์ด
์ด๊ฒ ์ ๋ ์ ๊ธํ๊ฒ ์ง๋ค๊ฐ ์กฐ๊ฑด์ ๋์น ๋ฌธ์ ์ธ๋ฐ, ์ค๋์ ์ฒซ๋ฌธ์ ๋ก ๋์ ํด๋ณด์๋ค. ๋ BFS๋ก ๋ฌธ์ ํ์ด๋ฐฉํฅ์ ์ ํ๋๋ฐ, ๋ฌธ์ ๊ฐ ๋ฐฉ๋ฌธ์ด ์ค๋ณต์ผ๋ก ์ผ์ด๋๋ค๋ ๊ฒ์ด๋ค. ์ฒ์์๋ ์ด์ ์ ๋ฐํ๋ค์ ๊ธฐ์ตํ๊ณ ์ค๋๊น, ๊ฐ๊ฐ์ ๋์ฐฉํ๋ ๋ฐฉ๋ฒ์์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ด๋ผ ์๊ฐํ๋ค. ํ์ง๋ง ์๋์ ๊ฒฝ์ฐ ์ค๋ณต์ด ๋งค์ฐ ๋ง์ด ๋ฐ์ํ ์ฌ์ง๊ฐ ์๋ค.
ABEA
BCDE
ADEF
์ด ๋ฌธ์ ๋ ๊ฒฐ๊ตญ, ํน์ ์ง์ญ์ ์ต์๋ก ๋ช๋ฒ๋ง์ ๋์ฐฉํ๋๊ฐ ๊ถ๊ธํ ๊ฒ์ด ์๋๊ณ , ๊ทธ๋ฅ ์๊ฐ ๋ฐ๊ณ ์ง๋์จ ๊ฒ์ด ์ด๋ค ๊ฒ์ด๋, ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ ๊ธธ์ด๊ฐ ์ผ๋ง๋๊ฐ ์ค์ํ ๋ฌธ์ ์ด๋ค. ๊ทธ๋์ ํ์ํ๋ ์์๋ ์๊ด์ด ์๊ณ , ๋ชจ๋ ํ์ํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ทธ ๊ณผ์ ์์ ์ค๋ณต์ด ๋ฐ์ํ ์ฌ์ง๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ถ๋ถ์ ์ ๊ฑฐํ๋ฉด์ ์ฐพ์์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ์์๋ queue๋ง๊ณ set์ ์จ์ ๊ตฌํํด๋ ๋ฌธ์ ๊ฐ ์๋ค. queue๋ฅผ ์ด๋ค๋ฉด ์ค๋ณต์ ๊ฑฐ๋ฅผ ํด์ผํ๋๋ฐ ๊ต์ฅํ ๊ท์ฐฎ๋ค.
Code
# BFS๋ก ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ตณ์ด queue์ผ ํ์๊ฐ ์๋ค.
# ์์์ ์๊ด์์ด ์์ ํ์์ ํ๋ ๊ฒ์ด ๋ชฉ์ !!
import sys
from collections import deque
input = sys.stdin.readline
r, c = map(int, input().split())
graph = [list(map(str, input().rstrip())) for _ in range(r)]
d = [[1, 0], [0, 1], [-1, 0], [0, -1]]
max_value = 0
q = set()
q.add((0, 0, graph[0][0]))
while q:
cy, cx, memory = q.pop()
max_value = max(max_value, len(memory))
for dy, dx in d:
ny, nx = cy + dy, cx + dx
if 0 <= ny < r and 0 <= nx < c and graph[ny][nx] not in memory:
q.add((ny, nx, memory + graph[ny][nx]))
print(max_value)