-
https://www.acmicpc.net/problem/2174
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114#include<iostream>#include<vector>#include<string>using namespace std;int a, b, n, m;struct robot {int x, y,dir;robot(int x, int y,int dir) {this->x = x;this->y = y;this->dir = dir;}};vector<robot> rb;struct cmd {int num;char com;int rep;cmd(int num, char com, int rep) {this->num = num;this->com = com;this->rep = rep;}};vector<cmd> cd;vector<string>er;int dx[] = { 0,-1,0,1 };int dy[] = { 1,0,-1,0 };int map[100][100];int main() {ios_base::sync_with_stdio(0);cin.tie(0);cin >> a >> b >> n >> m;//a가로, b세로;;for (int i = 0; i < n; i++) {int x, y; char dir;cin >> x >> y >> dir;switch (dir) {case 'N':rb.push_back(robot(y, x, 3));map[y][x] += 1;break;case 'S':rb.push_back(robot(y, x, 1));map[y][x] += 1;break;case 'E':rb.push_back(robot(y, x, 0));map[y][x] += 1;break;case 'W':rb.push_back(robot(y, x, 2));map[y][x] += 1;break;}}for (int i = 0; i < m; i++) {int num, rp; char cm;cin >> num >> cm >> rp;cd.push_back(cmd(num - 1, cm, rp));}for (int i = 0; i < cd.size(); i++) {int idx = cd[i].num;int x = rb[idx].x; int y = rb[idx].y;int dir = rb[idx].dir;for (int j = 1; j <= cd[i].rep; j++) {//0 동 1 남 2 서 3북if (cd[i].com == 'L') {rb[idx].dir-=1;if (rb[idx].dir < 0) rb[idx].dir = 3;}else if (cd[i].com == 'R') {rb[idx].dir+=1;if (rb[idx].dir == 4) rb[idx].dir = 0;}else if (cd[i].com == 'F') {rb[idx].x += dx[rb[idx].dir]; rb[idx].y += dy[rb[idx].dir];if (rb[idx].x <= 0 || rb[idx].x > b || rb[idx].y <= 0 || rb[idx].y > a) {string sho = "Robot ";string xo = to_string(idx + 1);sho += xo;sho += " crashes into the wall";cout << sho << '\n';return 0;}map[x][y] -= 1;map[rb[idx].x][rb[idx].y] += 1;if (map[rb[idx].x][rb[idx].y] > 1) {for (int k = 0; k < rb.size(); k++) {if (idx == k) continue;if (rb[idx].x == rb[k].x && rb[idx].y == rb[k].y) {string sho = "Robot ";string x1 = to_string(idx + 1);sho += x1;sho += " crashes into robot ";x1 = to_string(k+1);sho += x1;cout << sho << '\n';return 0;}}}}}}if (er.size() == 0)cout << "OK" << '\n';return 0;}http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter시뮬레이션 문제, 그냥 문제그대로만따라가면 어렵진않으나 역시 함정이 하나있다.
문제를 아무리읽어봐도 에러 하나나면 그대로 끝나는지에 대한 언급이없어서 처음에 에러를 에러 벡터에 담아서 출력하는걸생각했다.
에러 하나 나면, 그대로 끝내면 문제를해결할수있다.