반응형
문제 출처 :
https://www.acmicpc.net/problem/1987
알고리즘 분석 :
문제 해결에 필요한 사항
1. DFS
2. 문제 조건에 의한 처리 방법
문제 조건을 잘 이해하여하 하는 문제이다. 조금만 생각하면 바로 풀리지만, 조금만 잘못생각해도 꼬이는 문제이기도 하다.
문자를 밟았다는 것을 어떻게 코드화 시키느냐가 가장 중요한 문제인데
check[map[y][x] - 'A'] = 1; 이런식으로 1일때는 밟음, 0일때는 밟지 않음으로 형성하여 문제를 풀면
간단하게 해결할 수 있다.
소스 코드 :
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 | #include <iostream> #include <string> using namespace std; string map[21]; int check[26]; int n, m; int maxValue = 0; void dfs(int x, int y, int cnt) { if (check[map[y][x] - 'A'] == 0) { check[map[y][x] - 'A'] = 1; cnt > maxValue ? maxValue = cnt : 0; if (x + 1 < m) dfs(x + 1, y, cnt + 1); if (y + 1 < n ) dfs(x, y + 1, cnt + 1); if (x - 1 >= 0 ) dfs(x - 1, y, cnt + 1); if (y - 1 >= 0 ) dfs(x, y - 1, cnt + 1); check[map[y][x] - 'A'] = 0; } } int main() { int cnt = 1; cin >> n >> m; while (getchar() != '\n') {} for (int i = 0; i < n; i++) getline(cin, map[i]); dfs(0, 0, cnt); cout << maxValue; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[2167번] 2차원 배열의 합 (0) | 2016.11.08 |
---|---|
[1652번] 누울 자리를 찾아라 (0) | 2016.11.08 |
[10819번] 차이를 최대로 (0) | 2016.11.08 |
[2166번] 다각형의 면적 (2) | 2016.11.07 |
[11727번] 2xn 타일링 2 (0) | 2016.11.07 |