https://www.acmicpc.net/problem/1987
시간 2초, 메모리 256MB
input:
output :
조건 :
현재 까지의 알파벳을 기록 해야 함. 최대 거리를 기록 해야 하니 DFS로 하는게 맞을거 같음.
알파벳을 기록하는 리스트, visit 리스트.
그냥 알파벳 봤는지 기록하는 1차원 리스트 만들면 끝 아닌가? 어차피 최대 이동은 알파벳 숫자 만큼이니까.
현재 위치한 곳의 알파벳이 무엇인지 알아야 함.
흠.. 시간 초과가 나는데 어떻게 해야 할까????
아니네.. pypy3로 제출하니까 그냥 틀렸네.. 어디일까..
dp로 값을 기록 하며 하는 것은 틀렸다고 함.. 아 중복되어서 계산 될수도 있겠군. 여러번 겹쳐지니까....
전역변수 ans를 이용해서 최댓값을 갱신하는 방법으로 하는 것이 옳다.
정답 코드 :
import sys
R, C = map(int, sys.stdin.readline().split())
graph = [[] for i in range(R)]
alpha = [0] * (26)
ans = 0
for i in range(R):
data = sys.stdin.readline().strip()
for j in range(len(data)):
graph[i].append(ord(data[j]) - 65)
def DFS(x, y, cnt):
global ans
ans = max(ans, cnt)
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
for i in range(len(dx)):
nx = x + dx[i]
ny = y + dy[i]
if nx >= R or nx < 0 or ny < 0 or ny >= C:
continue
if not alpha[graph[nx][ny]]:
alpha[graph[nx][ny]] += 1
DFS(nx, ny, cnt + 1)
alpha[graph[nx][ny]] -= 1
alpha[graph[0][0]] = 1
DFS(0, 0, 1)
print(ans)