[백트래킹] 백준 1987 알파벳
2021. 6. 24. 14:28ㆍ알고리즘 문제분석
https://www.acmicpc.net/problem/1987
수행시간 : 1시간 / 난이도 : 골드 4
이 문제의 핵심 로직은 다음 방문할 목적지를 찾을때 조건 2가지 설정해주기, char와 bool 배열 간의 형변환(아스키코드 이용)해주기 정도. 어렵지 않게 풀 수 있는 재귀+그래프 문제.
#include <iostream>
#include <vector>
using namespace std;
int r, c;
char v_map[21][21];
int dx[4] = { 0,0,-1,1 };
int dy[4] = { 1,-1,0,0 };
bool visited[21];
int ans = 0;
void dfs(int x, int y, int cnt) {
if (cnt > ans) {
ans = cnt;
}
for (int i = 0;i < 4;++i) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= 0 && nx < r && ny >= 0 && ny < c) { //조건1 : 맵안에 있어야됌
if (visited[v_map[nx][ny] - 65] == false) { //조건2 : 내가 방문했던 알파벳이 아니여야
visited[v_map[nx][ny] - 65] = true;
dfs(nx, ny, cnt + 1);
visited[v_map[nx][ny] - 65] = false;
}
}
}
}
int main() {
cin >> r >> c;
string temp;
for (int i = 0;i < r;++i) {
cin >> temp;
for (int j = 0; j < c;++j) {
v_map[i][j] = temp[j];
}
}
visited[v_map[0][0] - 65] = true;
dfs(0, 0, 1);
cout << ans;
}
'알고리즘 문제분석' 카테고리의 다른 글
[스택&구현] 프로그래머스 "짝지어 제거하기" (0) | 2021.06.26 |
---|---|
[BFS] 프로그래머스 "카카오프렌즈 컬러링북" (0) | 2021.06.26 |
[투포인터] 백준 3273 두 수의 합 (0) | 2021.06.24 |
[백트래킹] 백준 18290 NM과 K(1) (0) | 2021.06.24 |
[BFS] 백준 16928 뱀과 사다리 게임 (0) | 2021.06.24 |