본문 바로가기
Problem Solving/Baekjoon

[백준] 8911 거북이 - Implementation / Java

by graycode 2022. 5. 31.

 문제 링크

 

8911번: 거북이

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

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

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

public class Main {

	static int[] dx = { -1, 0, 1, 0 };
	static int[] dy = { 0, 1, 0, -1 };

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		StringBuilder sb = new StringBuilder();

		int t = Integer.parseInt(br.readLine());
		for (int i = 0; i < t; i++) {
			int dir = 0, minY = 0, minX = 0, maxY = 0, maxX = 0, nowY = 0, nowX = 0;
			
			String command = br.readLine();
			for (int j = 0; j < command.length(); j++) {
				char c = command.charAt(j);

				if (c == 'F') {
					nowY = nowY + dy[dir];
					nowX = nowX + dx[dir];
				} else if (c == 'B') {
					nowY = nowY - dy[dir];
					nowX = nowX - dx[dir];
				} else if (c == 'L') {
					if (dir == 0)
						dir = 3;
					else
						dir--;
				} else if (c == 'R') {
					if (dir == 3)
						dir = 0;
					else
						dir++;
				}

				minY = Math.min(minY, nowY);
				minX = Math.min(minX, nowX);
				maxY = Math.max(maxY, nowY);
				maxX = Math.max(maxX, nowX);
			}
			
			sb.append((Math.abs(minY) + Math.abs(maxY)) * (Math.abs(minX) + Math.abs(maxX)) + "\n");
		}

		bw.write(sb.toString() + "\n");
		bw.flush();
	}

}

댓글