반응형
https://www.acmicpc.net/problem/2174
2174번: 로봇 시뮬레이션
첫째 줄에 두 정수 A, B가 주어진다. 다음 줄에는 두 정수 N, M이 주어진다. 다음 N개의 줄에는 각 로봇의 초기 위치(x, y좌표 순) 및 방향이 주어진다. 다음 M개의 줄에는 각 명령이 명령을 내리는 순
www.acmicpc.net
[ 문제풀이 ]
1. 각 로봇의 위치와 방향을 입력받고, arr 배열에 저장하고, m 배열을 만들어 각 좌표에 로봇이 있다면 해당 로봇의 번호로 초기화합니다.
2. 방향 전환 입력을 받으면 방향을 바꾸어주고, F 입력을 받으면 한 칸씩 움직이면서 해당 좌표에 다른 로봇이 있다면 충돌했다고 출력해 주고, 지도의 범위 벗어나면 벽과 추돌했다고 출력합니다.
3. 만약 충돌 없이 모든 명령을 수행했다면 OK를 출력합니다.
[ 소스코드 ]
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include<iostream> using namespace std; struct robot { int y, x; int dir; }; int A, B, N, M; int m[101][101]; robot arr[101]; int dy[] = { 0,-1,0,1 }; int dx[] = { 1,0,-1,0 }; int move(int num, int re) { int yy = arr[num].y; int xx = arr[num].x; int dir = arr[num].dir; m[yy][xx] = 0; for (int i = 0; i < re; i++) { yy += dy[dir]; xx += dx[dir]; if (yy > 0 && yy <= B && xx > 0 && xx <= A) { if (m[yy][xx] != num && m[yy][xx] != 0) { return m[yy][xx]; } } else { return -1; } } m[yy][xx] = num; arr[num] = { yy,xx,dir }; return 0; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); cin >> A >> B >> N >> M; for (int i = 1; i <= N; i++) { int x, y; char dir; cin >> x >> y >> dir; if (dir == 'E') { m[y][x] = i; arr[i] = { y,x,0 }; } else if (dir == 'S') { m[y][x] = i; arr[i] = { y,x,1 }; } else if (dir == 'W') { m[y][x] = i; arr[i] = { y,x,2 }; } else { m[y][x] = i; arr[i] = { y,x,3 }; } } while (M--) { int num, re; char cmd; cin >> num >> cmd >> re; if (cmd == 'F') { int n = move(num, re); if (n == -1) { cout << "Robot " << num << " crashes into the wall"; return 0; } else if (n != 0) { cout << "Robot " << num << " crashes into robot " << n; return 0; } } else if (cmd == 'R') { arr[num].dir += re; arr[num].dir %= 4; } else { re %= 4; arr[num].dir -= re; arr[num].dir = (arr[num].dir + 4) % 4; } } cout << "OK"; } | cs |
반응형
'백준' 카테고리의 다른 글
[ 백준 ] 1461번 - 도서관 (C++) (0) | 2023.10.03 |
---|---|
[ 백준 ] 1354번 - 무한 수열 2 (C++) (0) | 2023.10.02 |
[ 백준 ] 14719번 - 빗물 (C++) (0) | 2023.09.30 |
[ 백준 ] 9177번 - 단어 섞기 (C++) (0) | 2023.09.29 |
[ 백준 ] 1351번 - 무한 수열 (C++) (0) | 2023.09.28 |