Study hard
(c++)백준 1987번: 알파벳 본문
https://www.acmicpc.net/problem/1987
1987번: 알파벳
세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다. 말은 상하좌우로 인접한 네 칸 중의 한 칸으
www.acmicpc.net
[풀이]
같은 알파벳이 적힌 칸을 두 번 지날 수 없다는 조건이 있으므로 새로운 알파벳을 지날 때마다 체크를 해주었다.
한 칸씩 움직일 때마다 최대 칸 수를 갱신한다.
#include <iostream>
#include <string>
using namespace std;
int R, C;
char Board[20][20];
bool check[25];//ascii코드로 변환해서 체크
const int dx[] = { -1,1,0,0 };//상,하
const int dy[] = { 0,0,-1,1 };//좌,우
int Max = 1;
void getStep(int cnt, int x, int y) {
if (cnt > Max)Max = 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)
continue;
if (check[Board[nx][ny] - 'A'] == true)
continue;
check[Board[nx][ny] - 'A'] = true;
getStep(cnt + 1, nx, ny);
check[Board[nx][ny] - 'A'] = false;
}
}
int main() {
cin >> R >> C;
string line;
for (int i = 0; i < R; i++) {
cin >> line;
for (int j = 0; j < C; j++) {
Board[i][j] = line[j];
}
}
check[Board[0][0] - 'A'] = true;
getStep(1, 0, 0);
cout << Max << '\n';
return 0;
}
'백준 > 브루트 포스' 카테고리의 다른 글
(c++)백준 16198번: 에너지 모으기 (0) | 2020.08.26 |
---|---|
(c++)백준 14500번: 테트로미노 (0) | 2020.08.25 |
(c++)백준 15658번: 연산자 끼워넣기 (2) (0) | 2020.08.13 |
(c++)백준 14888번: 연산자 끼워넣기 (0) | 2020.08.13 |
(c++)백준 14225번: 부분수열의 합 (0) | 2020.08.11 |