※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2174번 문제인 로봇 시뮬레이션이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/2174 

 

2174번: 로봇 시뮬레이션

첫째 줄에 두 정수 A, B가 주어진다. 다음 줄에는 두 정수 N, M이 주어진다. 다음 N개의 줄에는 각 로봇의 초기 위치(x, y좌표 순) 및 방향이 주어진다. 다음 M개의 줄에는 각 명령이 명령을 내리는 순

www.acmicpc.net

문제 제목에 적혀있듯이 주어지는 로봇의 움직임을 시뮬레이션하는 것으로 문제를 해결할 수 있다.

모든 행동을 한단계씩 실행하더라도 최대 10,000번의 움직임만을 하게 되므로 명령에 주어지는 횟수만큼 직접 시뮬레이션을 돌려주자.

 

행과 열 순서의 입력이 아닌 X축과 Y축 순서의 입력이 들어오는 것에 주의하자.

 

방위와 관련한 구현은 해당 방위에 어떤 변화가 생기는지를 기록해두는 함수나 배열을 이용하여 간소화할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
using namespace std;

char LEFT[128];
char RIGHT[128];
int arr[102][102];
pair<pair<int, int>, char> robot[101];

int dr[128];
int dc[128];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	LEFT['N'] = 'W';
	LEFT['W'] = 'S';
	LEFT['S'] = 'E';
	LEFT['E'] = 'N';
	RIGHT['N'] = 'E';
	RIGHT['E'] = 'S';
	RIGHT['S'] = 'W';
	RIGHT['W'] = 'N';

	dr['N'] = 1, dr['S'] = -1, dc['W'] = -1, dc['E'] = 1;

	int R, C; cin >> C >> R;
	int N, M; cin >> N >> M;
	for (int i = 1; i <= N; i++) {
		int r, c; char dir; cin >> c >> r >> dir;
		robot[i] = make_pair(make_pair(r, c), dir);
		arr[r][c] = i;
	}
	while (M--) {
		int i, rep; char cmd; cin >> i >> cmd >> rep;
		while (rep--) {
			if (cmd == 'L') robot[i].second = LEFT[robot[i].second];
			else if (cmd == 'R') robot[i].second = RIGHT[robot[i].second];
			else {
				int rr = robot[i].first.first + dr[robot[i].second], cc = robot[i].first.second + dc[robot[i].second];
				if (rr<1 || rr>R || cc<1 || cc>C) {
					cout << "Robot " << i << " crashes into the wall";
					return 0;
				}
				if (arr[rr][cc]) {
					cout << "Robot " << i << " crashes into robot " << arr[rr][cc];
					return 0;
				}
				arr[robot[i].first.first][robot[i].first.second] = 0;
				arr[rr][cc] = i;
				robot[i].first = make_pair(rr, cc);
			}
		}
	}

	cout << "OK";
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1719 // C++] 택배  (0) 2022.05.20
[BOJ 12022 // C++] 짝  (0) 2022.05.19
[BOJ 14014 // C++] Dudu of English  (0) 2022.05.17
[BOJ 14010 // C++] Where To Go?  (0) 2022.05.16
[BOJ 25193 // C++] 곰곰이의 식단 관리  (0) 2022.05.15

+ Recent posts