본문 바로가기

BOJ 알고리즘 (패캠)/탐욕, 백트래킹

1987번: 알파벳 (백트래킹)

www.acmicpc.net/problem/1987

 

1987번: 알파벳

세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으

www.acmicpc.net

# 알파벳
# https://www.acmicpc.net/problem/1987 (백트래킹)

# 방문경로가 다르면 재방문 가능하므로 방문리스트가 아니라 SET을 이용한다.


def dfs(x, y, step):
    global result

    # if not visited[x][y]:
    #     visited[x][y] = 1
    if (x, y, step) not in queue:
        queue.add((x, y, step))

        result = max(result, len(step))

        for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
            nx, ny = x + dx, y + dy
            if 0 <= nx < R and 0 <= ny < C and MP[nx][ny] not in step:  # 가지치기 (이전 이동경로 제외)
                dfs(nx, ny, step + MP[nx][ny])


R, C = map(int, input().split())
MP = [input() for _ in range(R)]

# visited = [[0] * C for _ in range(R)]
queue = set()

result = 0
dfs(0, 0, MP[0][0])
print(result)

'BOJ 알고리즘 (패캠) > 탐욕, 백트래킹' 카테고리의 다른 글

1759번: 암호만들기 (백트래킹)  (0) 2020.12.03
9663번: N-Queen (백트래킹)  (0) 2020.10.25
1781번: 컵라면 (탐욕)  (0) 2020.10.24
1461번: 도서관 (탐욕)  (0) 2020.10.23
2212번: 센서 (탐욕)  (0) 2020.10.23