문제풀이/DFS & BFS

[파이썬] [DFS] 백준 1987 알파벳

승무_ 2022. 5. 2. 12:40

문제

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

 

1987번: 알파벳

세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으

www.acmicpc.net

코드

import sys
input=sys.stdin.readline

R,C=map(int, input().split())
array=[list(input().rstrip()) for _ in range(R)]

dx=[0,0,-1,1]
dy=[1,-1,0,0]

alpha=[0]*26
alpha[ord(array[0][0])-65]=1

result=0

def dfs(r,c,count):
    global result
    count+=1
    result=max(result,count)
    for i in range(4):
        nx=r+dx[i]
        ny=c+dy[i]
        if 0<=nx<R and 0<=ny<C:
            if not alpha[ord(array[nx][ny])-65]:
                alpha[ord(array[nx][ny])-65]=1
                dfs(nx,ny,count)
                alpha[ord(array[nx][ny])-65]=0

dfs(0,0,0)
print(result)

생각 정리

백트래킹을 이용해야 되는 문제 였다.