Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- ReLU
- Blockchain
- DeepLearning
- 문제풀이
- 백준
- 그리디
- dp
- Swift
- 알고리즘
- Stack
- BFS
- Node.js
- dfs
- 실버쥐
- 플로이드와샬
- NeuralNetwork
- 프로그래머스
- mysql
- C++
- Algorithm
- 풀이
- 그래프
- 백트래킹
- Docker
- Greedy
- 캡스톤정리
- 부르트포스
- ios
- 탐색
- sigmoid
Archives
- Today
- Total
개발아 담하자
[백준/C++] 1987 번 : 알파벳 풀이 본문
문제 1987번 : 알파벳
문제 링크 : https://www.acmicpc.net/problem/1987
문제
세로 R칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다.
말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다.
좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 프로그램을 작성하시오. 말이 지나는 칸은 좌측 상단의 칸도 포함된다.
입력
첫째 줄에 R과 C가 빈칸을 사이에 두고 주어진다. (1<=R,C<=20) 둘째 줄부터 R개의 줄에 걸쳐서 보드에 적혀 있는 C개의 대문자 알파벳들이 빈칸 없이 주어진다.
출력
첫째 줄에 말이 지날 수 있는 최대의 칸 수를 출력한다.
- 이전에 방문하지 않은 지점이 있닥 하덜랃 그 지점이 이전에 방문한 지점의 알파벳과 같다면 방문할 수 없다.
- 즉, 포인트는 방문한 위치가 아니라 방문한 지점의 알파벳 이다.
- 방문한 지점의 알파벳은 int alphabet[65] 에 저장해 두었다.
풀이
#include <iostream>
using namespace std;
int r, c;
char board[21][21];
int alphabet[26];
int ans = 0;
const int dy[] = {-1,1,0,0};
const int dx[] = {0,0,-1,1};
int max(int a, int b){
return a > b ? a : b;
}
void dfs(int y, int x, int cnt){
ans = max(ans, cnt);
for(int i=0; i<4; i++){
int ny = y + dy[i];
int nx = x + dx[i];
int k = (int)board[ny][nx]-65;
if(ny<0 || nx<0 || ny>=r || nx>=c) continue;
if(alphabet[k]) continue;
alphabet[k]++;
dfs(ny,nx,cnt+1);
alphabet[k]--;
}
}
int main(void){
cin >> r >> c;
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
cin >> board[i][j];
}
}
alphabet[(int)board[0][0]-65]++;
dfs(0,0,1);
cout << ans << endl;
return 0;
}
풀이 인증
'👩💻 알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준/C++] 2573번 : 빙산 풀이 (0) | 2020.03.01 |
---|---|
[백준/C++] 2206 번 : 벽 부수고 이동하기 풀이 (0) | 2020.02.07 |
[백준/C++] 2644 번 : 촌수계산 풀이 (0) | 2020.02.05 |
[백준/C++] 1389 번 : 케빈 베이컨의 6단계 법칙 풀이 (0) | 2020.02.04 |
[백준/C++] 10026 번 : 적록색약 풀이 (0) | 2020.02.03 |