[적용한 알고리즘]
백트래킹, 재귀, DFS
[아이디어]
바로 전에 풀었던 문제랑 거의 흡사하다.
[생각의 흐름 / 절차]
전 문제와 거의 동일
[교훈]
지금까지 나왔는 지 안나왔는지에 대한 중복 검사를 어떻게 할까 고민을 좀 했는데
그냥 간단하게 bool을 알파벳 길이만큼 해서 검사해주면 끝이다.
재밌다 재밌어
<코드>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int r, c;
int ans = -1;
char map[21][21];
bool visited[21][21];
bool overlap[26];
int dirx[] = {1, -1, 0, 0};
int diry[] = {0, 0, -1, 1};
void dfs(int x, int y, int cnt){
if (ans < cnt){
ans = cnt;
}
visited[x][y] = true;
overlap[map[x][y] - 'A'] = true;
for (int k = 0; k < 4; k++){
int nx = x + dirx[k];
int ny = y + diry[k];
if (0 <= nx && nx < r && 0 <= ny && ny < c){
if (!visited[nx][ny] && !overlap[map[nx][ny] - 'A']){
dfs(nx, ny, cnt + 1);
}
}
}
visited[x][y] = false;
overlap[map[x][y] - 'A'] = false;
}
int main(){
scanf("%d %d", &r, &c);
for (int i = 0; i < r; i++){
scanf("%s", map[i]);
}
dfs(0, 0, 1);
printf("%d\n", ans);
return 0;
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 6593번 상범빌딩 (125) | 2019.11.14 |
---|---|
[백준] 16397번 탈출 (126) | 2019.11.13 |
[백준] 1759번 암호만들기 (124) | 2019.11.12 |
[백준] 16197번 두 동전 (124) | 2019.11.10 |
[백준] 14500번 테트리미노 (126) | 2019.11.08 |