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 | 29 | 30 | 31 |
Tags
- div2개
- 우박수열정적분
- 최소스패닝트리
- JS스터디
- DP
- 5강클로저
- 두원사이의정수쌍
- 2023카카오블라인드코테
- React.StrictMode
- 타겟넘버
- solved.ac골드
- 비트마스크
- c++
- 알고리즘 문제풀이
- Lv2
- 과제진행하기
- 백준알고리즘
- [pccp 기출문제]
- 이중지도
- 정렬
- 지도 여러개
- 코어자바스크립트
- JS
- 프로그래머스
- pccp기출문제
- 알고리즘문제풀이
- 스택
- solved.ac플래티넘
- Lv3
- 백준 알고리즘
Archives
- Today
- Total
호지
[백준 알고리즘] 1987번 알파벳 문제풀이 c++ 본문
DFS를 활용한 풀이다.
보드에 적혀있는 것은 알파벳대문자 A-Z이므로
bool ck[26]배열을 활용해 해당 알파벳이 사용됬는지 확인한다.
(- 'A' 를 하면 알파벳대문자 순서대로 0~25의 값이 나온다. 아스키코드)
상하좌우 위치에 해당 하는 nx,ny값이 보드의 범위 안이면서
해당 보드에 써있는 알파벳이 사용되지 않았다면
DFS를 호출한다.
cnt가 최대일 때, 말이 이동 가능한 최대의 칸 수 이다.
#include <iostream>
using namespace std;
int r, c, res;
char board[20][20];
bool ck[26];
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
void DFS(int x, int y, int cnt){
res = max(cnt, res);
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 && !ck[board[nx][ny]-'A']){
ck[board[nx][ny]-'A'] = true;
DFS(nx,ny,cnt+1);
ck[board[nx][ny]-'A'] = false;
}
}
}
int main(){
cin >> r >> c;
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
cin >> board[i][j];
}
}
ck[board[0][0] - 'A'] = true;
DFS(0,0,1);
cout << res;
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 알고리즘] 2143번 두 배열의 합 문제풀이 c++ (0) | 2022.05.07 |
---|---|
[백준 알고리즘] 2098번 외판원 순회 c++ (0) | 2022.05.06 |
[백준 알고리즘] 1806번 부분합 (0) | 2022.05.04 |
[백준 알고리즘] 1799번 비숍 문제풀이 c++ (0) | 2022.05.04 |
[백준 알고리즘] 1766번 문제집 문제풀이 c++ (0) | 2022.05.02 |
Comments