[C++ 알고리즘] 백준 1987번: 알파벳 (미해결: 메모리초과)

sunny·2022년 6월 14일
0

백준 1987번 문제링크

메모리 초과...😥

실행해 보면 맞게 잘 됨.. 아마도 과도한 재귀함수 호출로 메모리 초과ㅠㅠ

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

int r, c;
string graph[20];
vector<char> v;
vector<int> len;

bool dfs(int x, int y)
{
    // 주어진 범위를 벗어나는 경우에는 즉시 종료
    if (x <= -1 || x >= r || y <= -1 || y >= c)
    {
        return false;
    }
    // v에 해당 알파벳이 없다면!
    if (find(v.begin(), v.end(), graph[x][y]) == v.end())
    {
        v.push_back(graph[x][y]); // (x,y)의 알파벳 v에 push
        // 상하좌우 살피기
        dfs(x - 1, y);
        dfs(x + 1, y);
        dfs(x, y - 1);
        dfs(x, y + 1);
        // 더 이상 탐색이 불가능한 경우 현재까지 탐색한 길이 len에 넣고
        // 마지막 원소 v에서 삭제! 그리고 다시 돌리고 돌리고...
        len.push_back(v.size());
        v.erase(v.end() - 1);
        return true;
    }
    return false;
}

int main()
{
    // 입력 받기
    cin >> r >> c;
    for (int i = 0; i < r; i++)
    {
        cin >> graph[i];
    }
    // 탐색 시작
    dfs(0, 0);
    // len에 담긴 길이들 내림차순으로 정렬
    sort(len.begin(), len.end(), greater<int>());
    // 결과 출력
    cout << len[0] << endl;

    return 0;
}

0개의 댓글