1987번: 알파벳
세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으
www.acmicpc.net
<내 코드>
import sys
sys.setrecursionlimit(10000)
def dfs(x, y, cnt):
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
now = (x, y)
global ans
ans = max(ans, cnt)
for i in range(4):
nx = now[0] + dx[i]
ny = now[1] + dy[i]
if(0 <= nx < R) and (0 <= ny < C):
if(done[strings[nx][ny]] == 0):
done[strings[nx][ny]] = 1
# print(done)
dfs(nx, ny, cnt+1)
done[strings[nx][ny]] = 0 #백트래킹
R, C = map(int, input().split())
strings = [list(map(lambda x: ord(x)-65, input())) for _ in range(R)] # 아스키 코드로 바꿔줌
done = [0]*26 # 알파벳 26개만큼 배열설정
done[strings[0][0]] = 1
ans = 1
dfs(0, 0, ans)
print(ans)
계속해서 시간 초과가 나서 실패하고, 이 코드로 겨우 통과했다. 알고리즘은 계속해서 맞았지만 재귀를 활용하다 보니 시간 초과가 많이 났다. 백트래킹의 기본 동작원리를 이해할 수 있는 문제였다.
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 2468] 안전 영역 - Python (브루트포스, DFS) (0) | 2020.09.03 |
---|---|
[백준 10026] 적록색약 - Python (DFS, BFS) (0) | 2020.09.03 |
[백준 8958] OX 퀴즈 - Python (문자열) (0) | 2020.09.02 |
[백준 2667] 단지번호 붙이기 - Python (그래프, BFS) (0) | 2020.09.01 |
[백준 7576] 토마토 - Python (그래프, BFS) (0) | 2020.09.01 |