본문 바로가기
백준 알고리즘/시뮬레이션

거북이 C++

by paysmile 2022. 4. 5.

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

 

8911번: 거북이

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

www.acmicpc.net

#include <iostream>
#include <string>

using namespace std;
string cmd;
int left_i, left_j, right_i, right_j;
int cur_i, cur_j;
int cur_dir; // 0:북 1:남 2:동 3:서

int main(void) {
	int testcase;

	cin >> testcase;
	for (int i = 0; i < testcase; i++) {
		cin >> cmd;
		left_i = left_j = right_i = right_j = 0;
		cur_i = 0;
		cur_j = 0;
		cur_dir = 0;

		for (int j = 0; j < cmd.size(); j++) {
			if (cmd[j] == 'F') {
				if (cur_dir == 0) {
					cur_i -= 1;
					if (cur_i < left_i) left_i = cur_i;
				}
				else if (cur_dir == 1) {
					cur_i += 1;
					if (cur_i > right_i) right_i = cur_i;
				}
				else if (cur_dir == 2) {
					cur_j += 1;
					if (cur_j > right_j) right_j = cur_j;
				}
				else if (cur_dir == 3) {
					cur_j -= 1;
					if (cur_j < left_j) left_j = cur_j;
				}
			}
			else if (cmd[j] == 'B') {
				if (cur_dir == 0) {
					cur_i += 1;
					if (cur_i > right_i) right_i = cur_i;
				}
				else if (cur_dir == 1) {
					cur_i -= 1;
					if (cur_i < left_i) left_i = cur_i;
				}
				else if (cur_dir == 2) {
					cur_j -= 1;
					if (cur_j < left_j) left_j = cur_j;
				}
				else if (cur_dir == 3) {
					cur_j += 1;
					if (cur_j > right_j) right_j = cur_j;
				}
			}
			else if (cmd[j] == 'L') {
				if (cur_dir == 0) {
					cur_dir = 3;
				}
				else if (cur_dir == 1) {
					cur_dir = 2;
				}
				else if (cur_dir == 2) {
					cur_dir = 0;
				}
				else if (cur_dir == 3) {
					cur_dir = 1;
				}
			}
			else if (cmd[j] == 'R') {
				if (cur_dir == 0) {
					cur_dir = 2;
				}
				else if (cur_dir == 1) {
					cur_dir = 3;
				}
				else if (cur_dir == 2) {
					cur_dir = 1;
				}
				else if (cur_dir == 3) {
					cur_dir = 0;
				}
			}
		}

		int width = right_i - left_i;
		int height = left_j - right_j;
		int answer = abs(width * height);
		cout << answer << endl;
	}
}

'백준 알고리즘 > 시뮬레이션' 카테고리의 다른 글

로봇 C++  (0) 2022.04.06
보이저 1호  (0) 2022.04.06
킹 C++  (0) 2022.03.08
캐슬 디펜스 C++  (0) 2022.03.07
어른 상어 C++  (0) 2021.04.22