문제
https://www.acmicpc.net/problem/2174
걸린 시간
01 : 25 : 22
풀이
C++
#include <bits/stdc++.h>
#define INF 1e9
typedef long long ll;
using namespace std;
int a, b, n, m, x, y;
int dy[4] = {1, 0, -1, 0}; // N, E, S, W
int dx[4] = {0, 1, 0, -1};
pair<int, int> ground[101][101]; // robots number, direction
map<int, pair<int, int>> robots; // robots number, loc
map<char, int> direction = {{'N', 0}, {'E', 1}, {'S', 2}, {'W', 3}};
vector<string> crash;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> a >> b >> n >> m;
memset(ground, -1, sizeof(ground));
char d; // direction
for(int i = 1; i <= n; i++){
cin >> x >> y >> d;
ground[y][x].first = i;
ground[y][x].second = direction[d];
robots[i].first = y;
robots[i].second = x;
}
int num, rep;
char cmd;
string log;
for(int i = 0; i < m; i++){
cin >> num >> cmd >> rep;
for(int j = 0; j < rep; j++){
int ry = robots[num].first;
int rx = robots[num].second;
switch(cmd){
case 'L':
ground[ry][rx].second -= 1;
ground[ry][rx].second = (ground[ry][rx].second+4)%4;
break;
case 'R':
ground[ry][rx].second += 1;
ground[ry][rx].second = (ground[ry][rx].second+4)%4;
break;
case 'F':
int ny = ry + dy[ground[ry][rx].second];
int nx = rx + dx[ground[ry][rx].second];
if(1 <= ny && ny <= b && 1 <= nx && nx <= a){
if(ground[ny][nx].second == -1){
ground[ny][nx].first = ground[ry][rx].first;
ground[ny][nx].second = ground[ry][rx].second;
ground[ry][rx].first = -1;
ground[ry][rx].second = -1;
robots[num].first = ny;
robots[num].second = nx;
}
else{
log = "Robot " + to_string(num) + " crashes into robot " + to_string(ground[ny][nx].first);
crash.push_back(log);
}
}
else{
log = "Robot " + to_string(num) + " crashes into the wall";
crash.push_back(log);
}
break;
}
}
}
if(crash.empty())
cout << "OK";
else
cout << crash[0];
return 0;
}
L, R 명령의 구현을 위해 테스트로 python 쉘에서 음수에 나머지 연산을 해 보았더니 양의 정수가 나와, 그대로 적용했지만 틀렸습니다가 출력되었다. 원인은 python 의 음수 나머지 연산 방식이 다른 언어와 다르기 때문이었다.
참고
'Baekjoon' 카테고리의 다른 글
Baekjoon 2225번 합분해 (0) | 2020.09.23 |
---|---|
Baekjoon 10800번 컬러볼 (0) | 2020.09.23 |
Baekjoon 1339번 단어 수학 (0) | 2020.09.18 |
Baekjoon 9322번 철벽 보안 알고리즘 (0) | 2020.09.17 |
Baekjoon 17877번 Integer Division (0) | 2020.09.16 |
댓글