본문 바로가기

Algo/백준

8911: 거북이 (구현)

구현

단순무식하게 코드를 짜보았다.

거북이 처음위치를 0,0이라고 생각하고 왼쪽으로 간 최소의 x값, 오른쪽으로 간 최대의 x값, 위쪽으로 간 최대의 y값, 아래쪽으로 간 최소의 y값 중에 최소의 값들은 음수라면 절대값으로 바꿔 넓이를 구해 출력하게 해주었다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuffer buf = new StringBuffer();
		int T = Integer.parseInt(br.readLine());
		for (int t = 1; t <= T; t++) {
			String s = br.readLine();
			char[] arr = new char[s.length()];
			for (int i = 0; i < arr.length; i++) {
				arr[i] = s.charAt(i);
			}
			int v = 1; // 1234, 좌상우하
			int x = 0;
			int y = 0;
			int max_x = 0;
			int max_y = 0;
			int min_x = 0;
			int min_y = 0;
			for (int i = 0; i < arr.length; i++) {
				if (arr[i] == 'F') {
					switch (v) {
					case 1:
						x++;
						if (max_x < x)
							max_x = x;
						else if (min_x > x)
							min_x = x;
						break;
					case 2:
						y++;
						if (max_y < y)
							max_y = y;
						else if (min_y > y)
							min_y = y;
						break;
					case 3:
						x--;
						if (max_x < x)
							max_x = x;
						else if (min_x > x)
							min_x = x;
						break;
					case 4:
						y--;
						if (max_y < y)
							max_y = y;
						else if (min_y > y)
							min_y = y;
						break;
					}
				} else if (arr[i] == 'B') {
					switch (v) {
					case 1:
						x--;
						if (max_x < x)
							max_x = x;
						else if (min_x > x)
							min_x = x;
						break;
					case 2:
						y--;
						if (max_y < y)
							max_y = y;
						else if (min_y > y)
							min_y = y;
						break;
					case 3:
						x++;
						if (max_x < x)
							max_x = x;
						else if (min_x > x)
							min_x = x;
						break;
					case 4:
						y++;
						if (max_y < y)
							max_y = y;
						else if (min_y > y)
							min_y = y;
						break;
					}
				} else if (arr[i] == 'L') {
					v++;
					if (v > 4)
						v = 1;
				} else if (arr[i] == 'R') {
					v--;
					if (v < 1)
						v = 4;
				}
			}
			
			int result = -1;
			if (max_x < 0) {
				if (max_y < 0)
					result = -min_x * -min_y;
				else if (min_y > 0)
					result = -min_x * max_y;
				else
					result = -min_x * (max_y - min_y);
			} else if (min_x > 0) {
				if (max_y < 0)
					result = max_x * -min_y;
				else if (min_y > 0)
					result = max_x * max_y;
				else
					result = max_x * (max_y - min_y);
			} else {
				if (max_y < 0)
					result = (max_x - min_x) * -min_y;
				else if (min_y > 0)
					result = (max_x - min_x) * max_y;
				else
					result = (max_x - min_x) * (max_y - min_y);
			}
			buf.append(result + "\n");
		}
		System.out.println(buf);
	}
}

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

3190: 뱀 (구현)  (0) 2021.02.19
2564: 경비원 (구현)  (0) 2021.02.19
11060: 점프점프 (DP) - 실패  (0) 2021.02.19
2491: 수열 (DP)  (0) 2021.02.19
13398: 연속합2 (DP)  (0) 2021.02.19