BFS 풀이

def bfs(x,y):
    
    queue = set([(x,y,graph[x][y])])
    dx = [-1,1,0,0]
    dy = [0,0,-1,1]

    
    while queue:
        
        global result
        x,y,visited = queue.pop()
        
        for i in range(len(dx)):
            nx = x + dx[i]
            ny = y + dy[i]
            
            if 0 <= nx < r and 0 <= ny < c :
                
                if graph[nx][ny] not in visited:
                    
                    next_visited = visited + graph[nx][ny]
                    queue.add((nx,ny,next_visited))
                    result = max(result,len(next_visited))           

result = 1
r,c = map(int,input().split())
graph = []
for i in range(r):
    graph.append(list(input()))

bfs(0,0)
print(result)

DFS 풀이(시간초과)

def dfs(x,y,cnt):
    
    global result
    
    visited[graph[x][y]] = 1
    result = max(cnt,result)
    
    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 0 <= nx < r and 0 <= ny < c :
            
            if visited[graph[nx][ny]] == 0 :
                
                dfs(nx,ny,cnt+1)
                visited[graph[nx][ny]] = 0

r,c = map(int,input().split())
graph = []
graph = [list(map(lambda x : ord(x) - 65, input())) for i in range(r)]
visited = [0] * 26

result = 0
dfs(0,0,1)
print(result)

Categories:

Updated: