문제

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

댓글