[백준] 1987- 알파벳 파이썬 풀이 (DFS, 백 트래킹)

김영민·2024년 7월 9일
0

코딩테스트

목록 보기
4/32
post-thumbnail


코드

# 3 6
# HFDFFB
# AJHGDH
# DGAGEH

R,C = map(int,input().split(" "))

maps = [[] for _ in range(R)]

for i in range(R):
    word = input()
    for j in range(len(word)):
        maps[i].append(word[j])

visited=[0]*26
dx=[-1,0,1,0]
dy=[0,1,-0,-1]

max_cnt = 0

def DFS(x,y,cnt):
    global max_cnt

    max_cnt = max(max_cnt,cnt)

    for i in range(4):
        nx,ny = x+dx[i],y+dy[i]
            
        if nx>=0 and nx<R and ny>=0 and ny<C and visited[ord(maps[nx][ny]) - ord('A')]==0:
            visited[ord(maps[nx][ny]) - ord('A')] = 1
            DFS(nx,ny,cnt+1)
            visited[ord(maps[nx][ny]) - ord('A')] = 0



visited[ord(maps[0][0]) - ord('A')] = 1

DFS(0,0,1)

print(max_cnt)

해석

  • 백트래킹을 해야 하는 문제
  • 최대값을 구하기 위해 DFS 외부에서 max_cnt를 선언하고 global로 함수 내에 선언.
  • 한 칸 넘어갈 때마다 DFS 함수 내의 cnt를 1씩 더하고, 비교.
  • ord라는 것을 통해 아스키 코드로 비교.
  • visited를 알파벳으로 해서 알파벳이 방문되었으면 DFS를 멈추는 것으로 진행
    -> 나는 여기에서 리스트를 만들어서 리스트 내부에 알파벳이 존재하면 안되는 것으로 했다.
    -> 어떻게 구현해야 할 지 감이 안 잡혔음.

0개의 댓글