어흥

[백준 8911] 거북이 (C++) 본문

알고리즘/백준

[백준 8911] 거북이 (C++)

라이언납시오 2020. 10. 12. 19:22
728x90
반응형

문제 링크: www.acmicpc.net/problem/8911

 

8911번: 거북이

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

www.acmicpc.net

1. 주의할 점

- 시작은 0,0이고 북쪽방향을 보고 있다

 

2. 구현

- 시작점, 시작방향 그리고 최대 X,Y와 최소 X,Y를 전부 0으로 초기화한다

- 방향을 전환하는 경우에는 X,Y의 최대최소를 구하지 않아도 된다

 

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int dx[4] = { 0,1,0,-1 };
int dy[4] = { -1,0,1,0 };
int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int test;
	string str;
	cin >> test;
	for (int t = 0; t < test; t++) {
		cin >> str;
		int cx = 0, cy = 0, cd = 0, minX = 0, maxX = 0, minY = 0, maxY = 0;
		for (int i = 0; i < str.size(); i++) {
			char c = str[i];
			if (c == 'L' || c == 'R') {
				if (c == 'L')
					cd = (cd + 3) % 4;
				else
					cd = (cd + 1) % 4;				
			}
			else {
				if (c == 'F') {
					cx += dx[cd];
					cy += dy[cd];
				}
				else {
					cx -= dx[cd];
					cy -= dy[cd];
				}
				maxX = max(cx, maxX);
				maxY = max(cy, maxY);
				minX = min(cx, minX);
				minY = min(cy, minY);
			}
		}
		cout << (maxX - minX)*(maxY - minY) << '\n';
	}
	return 0;
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 10216] Count Circle Groups (C++)  (0) 2020.10.20
[백준 3273] 두 수의 합 (C++)  (0) 2020.10.19
[백준 1965] 상자넣기 (C++)  (0) 2020.10.07
[백준 1800] 인터넷 설치 (C++)  (0) 2020.10.04
[백준 6443] 애너그램 (C++)  (0) 2020.10.04
Comments