몽셀통통의 블로그
[BaekJoon] 2174 로봇 시뮬레이션 :: monton 본문
문제
https://www.acmicpc.net/problem/2174
풀이
이 문제는 알고리즘 개념이 필요없는 문제이다.
좌표 입력 값이 특이하므로 간단하게 설정해준다
(주어진 좌표값을 살짝 바꾸어 원래 좌표형식을 바꾸어 주었다)
처음에는 왼쪽으로 주어져있지만 오른쪽으로 바꾸어주었다
그리고 for문을 통해서 명령어를 순서대로 진행하였다
여기서 사용된 알고리즘이나 트릭은 딱히 없었다.
이 문제가 알고리즘을 쓰지 않는거에 비해 생각보다 정답률이 낮았는데
그 이유에는 내생각엔 인덱스 수정이 부분부분 많이 필요해서 그런것 같다
내가 처음에 틀렸던 이유는 나는 좌표의 인덱스를 바꾸어 주어서 방향 수정을 해주지 않아도 되는데
방향 수정을 하는 바람에 많이 틀렸다
두번째로 틀렸던 이유는 명령어가 'F'이고 횟수가 7번일때, 같은 방향으로 7번을 나가야 하는데
새로운 변수 x,y를 두어 현재까지 나아간 방향을 저장하여야 지속적으로 그 방향을 나갈 수 있다
이 부분을 놓쳐서 몇번 더 틀렸다.
다른 테이스 케이스를 몇번 더 돌려보면서 왜 틀렸는지 찾는게 시간을 절약하는 방법이다
2074 로봇 시뮬레이션 테스트 케이스/예제 : https://ncpc.idi.ntnu.no/ncpc2005/#problems
코드
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 | #include <iostream> using namespace std; int A,B,N,M; int arr[101][101][2]; int dir[4][2] = { {-1,0},{0,1},{1,0},{0,-1} }; int chgdir(char c) { if (c == 'N') return 0; if (c == 'E') return 1; if (c == 'S') return 2; if (c == 'W') return 3; } int main() { cin >> A >> B; cin>>N >> M; for (int i = 1; i <= N; i++) { int a, b; char c; cin >> a >> b >> c; arr[B - b][a - 1][0] = i; int d = chgdir(c); arr[B - b][a - 1][1] = d; } for (int n = 0; n < M; n++) { int q, w,flag=0; char e; cin >> q >> e>>w; for (int i = 0; i < B; i++) { for (int j = 0; j < A; j++) { if (q == arr[i][j][0]) { int x = i; int y = j; while (w) { if (e == 'R') { arr[x][y][1] = arr[x][y][1] + 1 == 4 ? 0 : arr[x][y][1] + 1; } if (e == 'L') { arr[x][y][1] = arr[x][y][1] - 1 == -1 ? 3 : arr[x][y][1] - 1; } if (e == 'F') { int nx = x + dir[arr[x][y][1]][0]; int ny = y + dir[arr[x][y][1]][1]; if (nx < 0 || nx >= B || ny < 0 || ny >= A) { printf("Robot %d crashes into the wall", q); return 0; } if (arr[nx][ny][0]) { printf("Robot %d crashes into robot %d\n",q,arr[nx][ny][0]); return 0; } arr[nx][ny][0] = arr[x][y][0]; arr[nx][ny][1] = arr[x][y][1]; arr[x][y][0] = arr[x][y][1] = 0; x = nx, y = ny; } w--; } } } } } cout << "OK" << endl; } | cs |
'프로그래밍 > 백준 문제 풀기' 카테고리의 다른 글
[BaekJoon] 1520 내리막 길 :: monton (0) | 2018.08.28 |
---|---|
[BaekJoon] 11559 Puyo Puyo :: monton (0) | 2018.06.13 |
[BaekJoon] 2206 벽 부수고 이동하기 :: monton (0) | 2018.06.10 |
[BaekJoon] 7569 토마토 :: monton (0) | 2018.06.10 |
[BaekJoon] 1018 체스판 다시 칠하기 :: monton (0) | 2018.06.10 |