반응형
문제링크:www.acmicpc.net/problem/8911
간단한 시뮬레이션 문제입니다.
이동방향에 따라 이동시켜주면서 max y, x 값과 min y,x값을 찾아주면 되는 문제입니다.
이동할때는 4방향 배열을 사용해서 문제를 해결합니다.
바로 정답코드입니다.
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int t = 0;
int y_arr[4] = { -1,0,1,0 }; //북 동 남 서 방향
int x_arr[4] = { 0,1,0,-1 };
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> t;
while (t--) {
int cy = 0, cx = 0, dir = 0;
int minx = 0, miny = 0, maxx = 0, maxy = 0;
string arr;
cin >> arr;
for (int i = 0; i < arr.size(); i++) {
int ny, nx;
if (arr[i] == 'F') {
cy = y_arr[dir%4] + cy;
cx = x_arr[dir%4] + cx;
}
else if (arr[i] == 'B') {
cy = y_arr[(dir+2)%4] + cy;
cx = x_arr[(dir+2)%4] + cx;
}
else if (arr[i] == 'R') {
dir++;
}
else if (arr[i] == 'L') {
dir--;
if (dir < 0)
dir += 4;
}
// cout << i + 1<<"x y" << cx << ' ' << cy <<" dir "<<dir<<endl;
if (maxx < cx)
maxx = cx;
if (maxy < cy)
maxy = cy;
if (minx > cx)
minx = cx;
if (miny > cy)
miny = cy;
}
//cout << maxy << ' ' << maxx << ' ' << miny << ' ' << minx << endl;
cout << ((maxy - miny)* (maxx - minx)) << "\n";
}
return 0;
}
반응형
'알고리즘 > 시뮬레이션' 카테고리의 다른 글
[백준] 20057-마법사 상어와 토네이도(C++) (2) | 2021.03.30 |
---|---|
[백준] 20055-컨베이어 벨트 위의 로봇(C++) (0) | 2021.03.21 |
[백준] 19236-청소년 상어(C++) (0) | 2020.09.04 |
[백준] 13460-구슬 탈출2(C++) (0) | 2020.08.17 |
[백준] 13459-구슬 탈출(C++) (2) | 2020.08.17 |