티스토리 뷰
문제 링크 : https://www.acmicpc.net/problem/1987
문제
세로 R 칸, 가로 C칸으로 된 표 모양의 보드가 있다. 보드의 각 칸에는 대문자 알파벳이 하나씩 적혀 있고, 좌측 상단 칸 (1행 1열) 에는 말이 놓여 있다.
말은 상하좌우로 인접한 네 칸 중의 한 칸으로 이동할 수 있는데, 새로 이동한 칸에 적혀 있는 알파벳은 지금까지 지나온 모든 칸에 적혀 있는 알파벳과는 달라야 한다. 즉, 같은 알파벳이 적힌 칸을 두 번 지날 수 없다.
좌측 상단에서 시작해서, 말이 최대한 몇 칸을 지날 수 있는지를 구하는 프로그램을 작성하시오. 말이 지나는 칸은 좌측 상단의 칸도 포함된다.
입력
첫째 줄에 R과 C가 빈칸을 사이에 두고 주어진다. (1 <=R, C <=20) 둘째 줄부터 R개의 줄에 걸쳐서 보드에 적혀 있는 C개의 대문자 알파벳들이 빈칸 없이 주어진다.
출력
첫째 줄에 말이 지날 수 있는 최대의 칸 수를 출력한다.
-----------------------------------------------------------------------------------------------------------------------------------
풀이
알파벳 대문자 를 입력받으므로 방문 유무 배열을 visited 배열을 [ 91 ]로 선언한다 (아스키코드 값 기준 A : 65 ~ Z : 90)
다음 배열 전체를 탐색해야 하므로 BFS 퍼져가는 문제 스타일로 해결해준다. 매 순회하면서 Max < cnt 이면
Max 값을 경신해주는 방법으로 최대 값을 찾아준다.
map 배열 타입이 char 이므로 visited 배열에 넣을떄 int로 캐스팅해준다.
-----------------------------------------------------------------------------------------------------------------------------------
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#include<iostream>
using namespace std;
int R,C;
char map[21][21];
char visited[91];
int vety[]={0,1,0,-1};
int vetx[]={1,0,-1,0};
int Max;
void dfs(int y, int x , int cnt)
{
int i, nextx ,nexty;
for(i=0 ; i<4; i++)
{
nexty = y + vety[i];
nextx = x + vetx[i];
if( visited[ map[nexty][nextx] ] )
{
if(Max < cnt)
Max = cnt;
continue;
}
if(nextx >= 0 && nextx <C && nexty >=0 && nexty <R)
{
visited[ (int)map[nexty][nextx] ] = 1;
dfs(nexty ,nextx , cnt+1);
visited[(int)map[nexty][nextx] ] = 0;
}
}
}
int main()
{
int i,j;
cin >> R >> C;
for(i=0 ; i< R; i++ )
cin >> map[i];
visited[ (int)map[0][0] ] = 1;
dfs( 0, 0 ,1 );
cout << Max;
return 0;
}
|
c |
'백준 (BOJ) > 백트래킹' 카테고리의 다른 글
백준)1759-암호 만들기 (0) | 2019.05.01 |
---|---|
백준)9963-N-Queen (0) | 2019.05.01 |
백준)6603-로또 (0) | 2019.04.28 |
- Total
- Today
- Yesterday
- 그리디알고리즘
- stri
- #스페인어 #스페인어인강 #스페인어공부 #시원스쿨스페인어
- 그리디
- HTML
- dfs
- 사이클
- 그래프
- 이분 매칭
- 다익스트라
- 정렬
- greedy
- A
- 백트래킹
- 사이크
- BFS
- 이분매칭
- CSS
- 백트레킹
- 라오킹전사
- 라이즈오브킹덤즈
- 플로이드
- JavaSwing
- php
- KVK4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |