๐ณ ๋งํฌ
๐ ๋ฌธ์
์ธ๋ก R์นธ, ๊ฐ๋ก C์นธ์ผ๋ก ๋ ํ ๋ชจ์์ ๋ณด๋๊ฐ ์๋ค. ๋ณด๋์ ๊ฐ ์นธ์๋ ๋๋ฌธ์ ์ํ๋ฒณ์ด ํ๋์ฉ ์ ํ ์๊ณ , ์ข์ธก ์๋จ ์นธ (1ํ 1์ด) ์๋ ๋ง์ด ๋์ฌ ์๋ค.
๋ง์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋ค ์นธ ์ค์ ํ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋๋ฐ, ์๋ก ์ด๋ํ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ์ ์ง๊ธ๊น์ง ์ง๋์จ ๋ชจ๋ ์นธ์ ์ ํ ์๋ ์ํ๋ฒณ๊ณผ๋ ๋ฌ๋ผ์ผ ํ๋ค. ์ฆ, ๊ฐ์ ์ํ๋ฒณ์ด ์ ํ ์นธ์ ๋ ๋ฒ ์ง๋ ์ ์๋ค.
์ข์ธก ์๋จ์์ ์์ํด์, ๋ง์ด ์ต๋ํ ๋ช ์นธ์ ์ง๋ ์ ์๋์ง๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋ง์ด ์ง๋๋ ์นธ์ ์ข์ธก ์๋จ์ ์นธ๋ ํฌํจ๋๋ค.
๐พ ํ์ด ๋ฐฉ๋ฒ
DFS๋ก ํ์์ ๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค.. ๊ทธ๋ฆฌ๊ณ PASSING
์ ์ฒ์์๋ DICTIONARY
๋ก ๋ง๋ค์ด {65:0,66:1,..}
์ด๋ฐ ์์ผ๋ก ์์คํค ์๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ๋ค, PASSING[ord('A')] == 0 #์ง๋์ง ์์์.
์ด๋ฐ ์์ผ๋ก ํ๋ฉด ํ๋ฆฌ์ง ์์๋ค. ์๋ง๋ ๋ค์ ๋ฐฑํธ๋ํนํด๊ฐ๋ ๊ณผ์ ์์ ๊ณ์ ์ง๋ฌ๋ค๊ณ ํ์๋์ด์์ด์ ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.
BFS๋ก ํ์๋ฉด, ์ง๋๊ฐ ์ํ๋ฒณ์ธ์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด ์ง๋๊ฐ ๋๋ง๋ค ์ด์ ๊ฑฐ์ ์ง๋๊ฐ ์ํ๋ฒณ์ ๋ํด์ค๋ค. ์๋ฅผ ๋ค์๋ฉด ์๋๋ 'A' ์๋ค๋ฉด, ๋ค์๋ฒ์ 'B'๋ฅผ ์ง๋ ๋ ๋ณ์ ans
๋ 'A' ์์ 'AB' ๊ฐ ๋๋ ๊ฒ์ด๋ค.
solution ์ฝ๋ (BFS: ํต๊ณผ, DFS: ์๊ฐ์ด๊ณผ)
import sys
sys.stdin = open("input.txt", "rt")
sys.setrecursionlimit(10**5)
dx = [1,-1,0,0]
dy = [0,0,1,-1]
def bfs(x,y):
global answer
q = set([(x,y,board[x][y])])
while q:
x, y, ans = q.pop()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < R and 0 <= ny < C and (board[nx][ny] not in ans):
q.add((nx,ny,ans+board[nx][ny]))
answer = max(answer, len(ans)+1)
def dfs(x,y,cnt):
global passing, answer
answer = max(cnt, answer)
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < R and 0 <= ny < C and (board[nx][ny] not in passing):
passing.append(board[nx][ny])
dfs(nx, ny, cnt + 1)
passing.remove(board[nx][ny])
R, C = map(int, sys.stdin.readline().split())
board = list()
for _ in range(R):
board.append(list(sys.stdin.readline().split().pop()))
passing = list()
passing.append(board[0][0])
answer = 1
# dfs(0,0,1)
bfs(0,0)
print(answer)