본문 바로가기

알고리즘 문제풀이/추천 문제

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

반응형

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

 

8911번: 거북이

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

www.acmicpc.net

 

단순 구현 문제다. Turtle 이라는 클래스를 만들어서 풀었다. 정답으로 출력해야 하는 직사각형의 넓이는 거북이의 이동경로에서 가로/세로 최대/최소값의 차이를 곱하면 된다. 

 

문제에서 주어진 네 개의 함수는 그대로 구현했고, 여기에 init() 라는 함수를 추가했다. 이 함수는 거북이가 이동할때마다 x, y의 최대 최소값을 초기화해주는 함수다. 

 

문제가 어렵지 않으므로 바로 정답 코드...

 

#include <iostream>
#include <vector>
#define UP 0
#define RIGHT 1
#define DOWN 2
#define LEFT 3
using namespace std;

class Turtle {
public:
	int x, y, max_x, max_y, min_x, min_y, dir;
	Turtle() : x(0), y(0), max_x(0), min_x(0), max_y(0), min_y(0), dir(UP) {}

	void forward() {
		if (dir == LEFT) --x;
		else if (dir == RIGHT) ++x;
		else if (dir == UP) ++y;
		else if (dir == DOWN) --y;
	}
	
	void backward() {
		if (dir == LEFT) ++x;
		else if (dir == RIGHT) --x;
		else if (dir == UP) --y;
		else if (dir == DOWN) ++y;
	}

	void init() {
		if (x > 0) max_x = max(max_x, x);
		if (x < 0) min_x = min(min_x, x);
		if (y > 0) max_y = max(max_y, y);
		if (y < 0) min_y = min(min_y, y);
	}

	void turn_left() {
		if (dir == LEFT) dir = DOWN;
		else if (dir == RIGHT) dir = UP;
		else if (dir == UP) dir = LEFT;
		else if (dir == DOWN) dir = RIGHT;
	}

	void turn_right() {
		if (dir == LEFT) dir = UP;
		else if (dir == RIGHT) dir = DOWN;
		else if (dir == UP) dir = RIGHT;
		else if (dir == DOWN) dir = LEFT;
	}

	int get_ans() {
		return (max_x - min_x) * (max_y - min_y);
	}
};

int main() {

	int n;
	vector<string> v;
	string str;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> str;
		v.push_back(str);
	}

	for (int i = 0; i < n; i++) {
		str = v[i];
		Turtle turtle = Turtle();
		
		for (int j = 0; j < str.size(); j++) {
			if (str[j] == 'F') {
				turtle.forward();
				turtle.init();
			}
			else if (str[j] == 'B') {
				turtle.backward();
				turtle.init();
			}
			else if (str[j] == 'R') turtle.turn_right();
			else if (str[j] == 'L') turtle.turn_left();
		}

		cout << turtle.get_ans() << endl;
	}

	return 0;
}

 

 

반응형

'알고리즘 문제풀이 > 추천 문제' 카테고리의 다른 글

[ 백준 2933 ] 미네랄 (C++)  (0) 2022.03.22
[ 백준 11559 ] Puyo Puyo (C++)  (0) 2022.03.21
[ 백준 16113 ] 시그널 (C++)  (0) 2022.03.08
[ 백준 2290 ] LCD Test (C++)  (0) 2022.02.28
[ 백준 16506 ] CPU (C++)  (0) 2022.02.23