오늘의 알고리즘
[C++] 백준 1987 알파벳
하늘하늘 .
2022. 5. 23. 17:09
#include <iostream>
#include <string.h>
#include <vector>
#include <stack>
#include <tuple>
int R = 0;
int C = 0;
std::vector<std::string> vec = {};
bool visit[27] = {};
int iDirX[4] = { 0,0,1,-1 };
int iDirY[4] = { 1,-1,0,0 };
void CheckStack(int iCount, int iX, int iY, int& answer)
{
answer = std::max(answer, iCount);
for (int i = 0; i < 4; ++i)
{
int iNextX = iX + iDirX[i];
int iNextY = iY + iDirY[i];
if (iNextX >= 0 && iNextX < R &&
iNextY >= 0 && iNextY < C)
{
if (!visit[vec[iNextX][iNextY] - 'A'])
{
visit[vec[iNextX][iNextY] - 'A'] = true;
CheckStack(iCount + 1, iNextX, iNextY, answer);
visit[vec[iNextX][iNextY] - 'A'] = false;
}
}
}
}
int main()
{
int iAnswer = 0;
std::cin >> R >> C;
for (int i = 0; i < R; ++i)
{
std::string s = {};
std::cin >> s;
vec.push_back(s);
}
visit[vec[0][0] - 'A'] = true;
CheckStack(1, 0, 0, iAnswer);
std::cout << iAnswer;
}
1. string 형식이라 'A'를 빼고난 방식이 중요했다.
2. DFS로 기억해나가면서 풀어야했다.