<문제 풀이>
같은 알파벳을 지날 수 없다는 조건이 있으므로 dfs를 통해 풀었다.
먼저 입력을 char형으로 받아 맵을 만들었고, 이후 visit의 비교를 위해 'A'가 아스코드값으로 65이므로
map[x][y]-65를 통해 방문여부를 판단하였다.
<정답 코드>
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 | #include <iostream> #include <vector> #define MAX 21 using namespace std; int row, col; char map[MAX][MAX]; int dx[4] = { 0, 0, -1, 1 }; int dy[4] = { 1, -1, 0, 0 }; int visit[26]; vector<pair<int, int>> v; int ans; void dfs(int cnt) { int x = v.front().first; int y = v.front().second; v.pop_back(); for (int i = 0; i < 4; i++) { if (x + dx[i] >= 0 && y + dy[i] >= 0 && x + dx[i] < row && y + dy[i] < col) if (visit[map[x + dx[i]][y + dy[i]] - 65] == 0) { visit[map[x + dx[i]][y + dy[i]] - 65] = 1; v.push_back({ x + dx[i], y + dy[i] }); dfs(cnt + 1); visit[map[x + dx[i]][y + dy[i]] - 65] = 0; } } if (ans <= cnt) ans = cnt; return; } int main() { cin >> row >> col; for (int r = 0; r < row; r++) for (int c = 0; c < col; c++) cin >> map[r][c]; visit[map[0][0] - 65] = 1; v.push_back({ 0,0 }); dfs(1); cout << ans; return 0; } | cs |
'C++ 문제풀이' 카테고리의 다른 글
2004번 백준(Baekjoon) (0) | 2018.10.16 |
---|---|
2457번 백준(Baekjoon) (0) | 2018.10.12 |
1068번 백준(Baekjoon) (0) | 2018.10.04 |
1149번 백준(Baekjoon) (0) | 2018.10.04 |
2579번 백준(Baekjoon) (0) | 2018.10.02 |