본문 바로가기

알고리즘/백준

[백준] 1987번 :알파벳

728x90

https://www.acmicpc.net/problem/1987

 

1987번: 알파벳

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

www.acmicpc.net

해당 문제는 완전탐색 + 깊이우선탐색 + 백트래킹 문제로 해결 할 수 있다.

 

같은 알파벳을 지날 수 없는것이 백트래킹 조건이고 깊이우선탐색과 완전탐색으로 모든 경로를 다 방문해 보면서 갈 수 없는 경로를 백 트래킹 하면 된다.

 

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

board = [input() for _ in range(R)]
max_count = 0

def dfs(i, j, count, visited):
    global max_count
    max_count = max(max_count, count)

    directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]

    for dx, dy in directions:
        nx, ny = i + dx, j + dy
        if 0 <= nx < R and 0 <= ny < C and board[nx][ny] not in visited:
            dfs(nx, ny, count + 1, visited + board[nx][ny])

dfs(0, 0, 1, board[0][0])
print(max_count)
728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2098번 : 외판원 순회  (0) 2023.07.26
[백준] 2294번 : 동전 2  (0) 2023.07.24
[백준] 2580번 : 스도쿠  (0) 2023.07.23
[백준] 2585번 : 경비행기  (0) 2023.07.23
[백준] 23083번 : 꿀벌 승연이  (0) 2023.07.23