[백준/BOJ] 백준 8911번 : 거북이
2020. 9. 18. 02:33ㆍ알고리즘 문제풀이
명령어에 따라 거북이를 움직이며 이동한 위치의 x, y값의 최댓값과 최솟값을 구해 직사각형의 넓이를 출력한다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <utility>
using namespace std;
int dydx[4][2] = { {0,-1},{-1,0},{0,1},{1,0} };
int x_min;
int x_max;
int y_min;
int y_max;
void Solve(string command)
{
//(0,0)위치에서 위쪽을 바라보고 있을때
//바라보는 방향과, 위치를 저장
pair<int, pair<int, int>> here = make_pair(3, make_pair(0, 0));
for (int i = 0; i < command.size(); i++)
{
pair<int, pair<int, int>> there = here;
if (command[i] == 'F')
{
there.second.first += dydx[there.first][0];
there.second.second += dydx[there.first][1];
}
else if (command[i] == 'B')
{
there.second.first -= dydx[there.first][0];
there.second.second -= dydx[there.first][1];
}
else if (command[i] == 'L')
{
there.first--;
if (there.first < 0)
there.first = 3;
}
else if (command[i] == 'R')
{
there.first++;
if (there.first > 3)
there.first = 0;
}
x_min = min(x_min, there.second.second);
x_max = max(x_max, there.second.second);
y_min = min(y_min, there.second.first);
y_max = max(y_max, there.second.first);
here = there;
}
}
int main()
{
int tc;
string command;
cin >> tc;
for (int t = 0; t < tc; t++)
{
x_min = 0;
x_max = 0;
y_min = 0;
y_max = 0;
cin >> command;
Solve(command);
//직사각형의 넓이를 출력한다
cout << (x_max - x_min)*(y_max - y_min) << "\n";
}
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 11404번 : 플로이드 (0) | 2020.09.23 |
---|---|
[백준/BOJ] 백준 9610번 : 사분면 (0) | 2020.09.18 |
[백준/BOJ] 백준 2548번 : 대표 자연수 (0) | 2020.09.18 |
[백준/BOJ] 백준 1032번 : 명령 프롬프트 (0) | 2020.09.17 |
[백준/BOJ] 백준 15658번 : 연산자 끼워넣기 (2) (0) | 2020.09.17 |