본문 바로가기

PS

백준 BOJ 1987 C++ [알파벳]

#include <bits/stdc++.h>
using namespace std;

int r, c, ans;
char board[22][22];
bool visited[26];  // A ~ Z

int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};

void dfs(int x, int y, int cnt) {
    ans = max(ans, cnt);
    for (int k = 0; k < 4; ++k) {
        int nx = x + dx[k];
        int ny = y + dy[k];
        if (nx >= 0 && nx < r && ny >= 0 && ny < c) {
            if (!visited[board[nx][ny] - 'A']) {
                visited[board[nx][ny] - 'A'] = true;  // 방문 표시
                dfs(nx, ny, cnt + 1);  // 파고 듦
                visited[board[nx][ny] - 'A'] = false;  // 나오면서 방문 표시 해제
            }
        }
    }
}

void solve() {
    cin >> r >> c;
    for (int i = 0; i < r; ++i) {
        for (int j = 0; j < c; ++j) {
            cin >> board[i][j];
        }
    }
    visited[board[0][0] - 'A'] = true;
    dfs(0, 0, 1);
    cout << ans << '\n';
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    solve();
    return 0;
}