BOJ 1726 :: 로봇
문제 링크 : https://www.acmicpc.net/problem/1726
나레기ㅠㅠㅠㅠ 왜이렇게 성급한거야 진짜!!!
틀렸습니다를 두 번 경험한 후, 맞았습니다! 가 나옴...
내가 틀렸던 이유
1) 문제 정독 X
로봇을 모든 방향 다 회전시킬 수 있는 건 줄 알고 코딩하였다..
2) 잘못된 조건문 처리
이미 방문했을 때 => 그 방향의 다음 칸으로 넘어갈 수 있기 때문에 continue 해야 한다.
궤도가 없을 때 => 그 방향의 다음 칸으로 넘어갈 수 없기 때문에 break 해야 한다.
나의 코드
Github : https://github.com/j2wooooo/Daliy_Algorithms/blob/master/Daliy_Algorithms/BOJ_1726/BOJ_1726.cpp
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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | // 백준알고리즘 1726번 :: 로봇 #include<iostream> #include<queue> using namespace std; int M, N, ans; int startx, starty, startdir, destx, desty, destdir; // 로봇의 x좌표, y좌표, 방향 queue <pair<pair<int, int>, int>> robot; int visited[101][101][5]; int factory[101][101]; // 동, 서, 남, 북 int dx[4] = {0, 0, 1, -1}; int dy[4] = {1, -1, 0, 0}; int bfs() { int count = 0; while (!robot.empty()) { int qsz = robot.size(); while (qsz--) { int x = robot.front().first.first; int y = robot.front().first.second; int d = robot.front().second; robot.pop(); if (x == destx && y == desty && d == destdir) return count; // d 방향으로 최대 3칸까지 갈 수 있다. int mx = x + dx[d-1]; int my = y + dy[d-1]; int md = d; int k = 3; while (k > 0) { if (mx < 1 || mx > M || my < 1 || my > N) break; if (factory[mx][my] == 1) break; if (!visited[mx][my][md]) { visited[mx][my][md] = 1; robot.push(make_pair(make_pair(mx, my), md)); } mx += dx[d-1]; my += dy[d-1]; k--; } if (d <= 2) md = 3; else md = 1; // 왼쪽/오른쪽 2 방향으로 회전할 수 있다. for (int i = 0; i < 2; i++) { mx = x; my = y; md += i; if (visited[mx][my][md]) continue; visited[mx][my][md] = 1; robot.push(make_pair(make_pair(mx, my), md)); } } count++; } return count; } int main() { cin >> M >> N; for (int i = 1; i <= M; i++) { for (int j = 1; j <= N; j++) { cin >> factory[i][j]; } } cin >> startx >> starty >> startdir; robot.push(make_pair(make_pair(startx, starty), startdir)); visited[startx][starty][startdir] = 1; cin >> destx >> desty >> destdir; ans = bfs(); cout << ans; return 0; } | cs |
'Problem > BFS' 카테고리의 다른 글
[C/C++] BOJ 3055 :: 탈출 (0) | 2019.02.12 |
---|---|
[C/C++] BOJ 1113 :: 수영장 만들기 (0) | 2019.02.08 |
[C/C++] BOJ 10026 :: 적록색약 (0) | 2019.02.06 |
[C/C++] BOJ 14923 :: 미로 탈출 (0) | 2019.01.24 |
[C/C++] BOJ 3184 :: 양 (0) | 2019.01.23 |