1일1알

백준 8911번 거북이 C++ 본문

알고리즘

백준 8911번 거북이 C++

영춘권의달인 2022. 11. 16. 13:02

https://www.acmicpc.net/problem/8911

 

8911번: 거북이

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 컨트롤 프로그램이 주어진다. 프로그램은 항상 문제의 설명에 나와있는 네가지 명령으로만 이루어져

www.acmicpc.net

 

구현, 시뮬레이션

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
#include <queue>
#include <map>
#include <set>

using namespace std;

int dRow[4] = { -1,0,1,0 };
int dCol[4] = { 0,1,0,-1 };

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int t;
	cin >> t;
	while (t--) {
		int dir = 0;
		int row = 0, col = 0;
		int minRow = 0, minCol = 0, maxRow = 0, maxCol = 0;
		string str;
		cin >> str;
		for (int i = 0; i < str.length(); i++) {
			char order = str[i];
			switch (order) {
			case 'F':
				row += dRow[dir];
				col += dCol[dir];
				break;
			case 'B':
				row -= dRow[dir];
				col -= dCol[dir];
				break;
			case 'L':
				dir = (dir + 3) % 4;
				break;
			case 'R':
				dir = (dir + 1) % 4;
				break;
			}
			minRow = min(minRow, row);
			minCol = min(minCol, col);
			maxRow = max(maxRow, row);
			maxCol = max(maxCol, col);
		}
		int width = maxCol - minCol;
		int height = maxRow - minRow;
		cout << width * height << "\n";
	}
}