문제
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)
생각 정리
백트래킹을 이용해야 되는 문제 였다.
'문제풀이 > DFS & BFS' 카테고리의 다른 글
[파이썬] [DFS] 백준 1068 트리 (0) | 2022.05.11 |
---|---|
[PyPy] [DFS] 백준 2580 스도쿠 (0) | 2022.05.05 |
[파이썬] [BFS] 백준 2206 벽 부수고 이동하기 (0) | 2022.04.09 |
[파이썬] [BFS] 백준 7569 토마토 (0) | 2022.04.02 |
[파이썬] [BFS] 백준 3055 탈출 (0) | 2022.03.23 |