일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준
- swea
- algorithm
- language
- 재테크/투자
- 자료구조
- LeetCode
- 문제풀이
- 프로그래머스
- db
- 알고리즘
- 감상문
- network
- SW Expert Academy
- Computer Science
- D2
- 네트워크
- 데이터베이스
- data structure
- c++
- 운영체제
- 법의학
- Database
- cs
- OS
- algogritim
- Programmers
- 독서
- D3
- BOJ
Archives
- Today
- Total
선택은 나의 것
[BOJ 백준] 2174번 로봇 시뮬레이션 본문
문제
BOJ number : https://www.acmicpc.net/problem/2174
2174번: 로봇 시뮬레이션
첫째 줄에 두 정수 A, B가 주어진다. 다음 줄에는 두 정수 N, M이 주어진다. 다음 N개의 줄에는 각 로봇의 초기 위치(x, y좌표 순) 및 방향이 주어진다. 다음 M개의 줄에는 각 명령이 명령을 내리는 순
www.acmicpc.net
접근
시뮬레이션 문제이기 때문에 문제에서 주어지는 조건만 잘 유념해서 구현하면 무리 없이 해결 가능한 문제이다. 다만 문제에서 주어지는 세로축의 좌표가 위에서부터 아래의 순서로 번호를 매기는 일반적인 방식이 아닌 그림과 같이 아래에서부터 위로 번호를 매기는 방식이어서 입력을 받을 때 B(땅의 세로 크기) + 1 - x(입력값) 해주었다.
코드
#include <iostream>
#include <map>
using namespace std;
struct robot {
int x, y, d;
};
int A, B, N, M, dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1}, land[105][105];
robot m[105];
int go(int rb, int num) {
int going = m[rb].d, rx = m[rb].x, ry = m[rb].y;
for (int i = 0; i < num; i++) {
land[rx][ry] = 0;
rx += dx[going];
ry += dy[going];
if (rx <= 0 || ry <= 0 || rx > B || ry > A)
return -1;
else if (land[rx][ry] != 0)
return land[rx][ry];
}
m[rb].x = rx;
m[rb].y = ry;
land[rx][ry] = rb;
return 0;
}
int turn(int rb, int num, char dd) {
num = num % 4;
if (dd == 'R')
m[rb].d = (m[rb].d + num) % 4;
else {
m[rb].d -= num;
if (m[rb].d < 0)
m[rb].d += 4;
}
return 0;
}
int main() {
int x, y, t;
char c;
cin >> A >> B >> N >> M;
for (int i = 1; i <= N; i++) {
cin >> y >> x >> c;
land[B + 1 - x][y] = i;
if (c == 'N')
t = 0;
else if (c == 'E')
t = 1;
else if (c == 'S')
t = 2;
else
t = 3;
m[i] = {B + 1 - x, y, t};
}
for (int i = 0; i < M; i++) {
cin >> x >> c >> y;
if (c == 'F')
t = go(x, y);
else
t = turn(x, y, c);
if (t == -1){
cout << "Robot "<< x <<" crashes into the wall";
return 0;
} else if (t > 0) {
cout << "Robot "<< x <<" crashes into robot " << t;
return 0;
}
}
cout << "OK";
return 0;
}
'☽ Algorithm > BOJ' 카테고리의 다른 글
[BOJ 백준] 10836번 여왕벌 서브태스크 (1) | 2021.12.15 |
---|---|
[BOJ 백준] 11967번 불켜기 (0) | 2021.12.14 |
[BOJ 백준] 14466번 소가 길을 건너간 이유 6 (0) | 2021.12.11 |
[BOJ 백준] 16967번 배열 복원하기 (0) | 2021.12.09 |
[BOJ 백준] 17780번 새로운 게임 (0) | 2021.12.08 |
Comments