[Python] 백준 1987번: 알파벳
알고리즘/[Python] 백준

[Python] 백준 1987번: 알파벳

출처 : https://www.acmicpc.net/problem/1987

 

1987번: 알파벳

문제 세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다. 좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는

www.acmicpc.net

 

# code

## import sys
## input = sys.stdin.readline
 
def bfs():
    mx = 0
    queue = set()
    queue.add((00, board[0][0]))
 
    while queue:
        x, y, sentence = queue.pop()
        mx = max(mx, len(sentence))
        if mx == 26return 26
        ## 동 남 서 북
        for dx, dy in zip(dxs, dys):
            nx, ny = x + dx, y + dy
            if nx < 0 or nx >= r or ny < 0 or ny >= c: continue
            if board[nx][ny] in sentence: continue
            queue.add((nx, ny, sentence + board[nx][ny]))
    return mx
 
 
if __name__ == '__main__':
    r, c = map(int, input().split())
    board = [list(input()) for _ in range(r)]
 
    ## 동 남 서 북
    dxs = (010-1)
    dys = (10-10)
    print(bfs())
cs