Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

JAVA Developer Training

47. 8911번 거북이 본문

백준 알고리즘

47. 8911번 거북이

Romenest 2021. 12. 31. 16:59

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

 

8911번: 거북이

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

www.acmicpc.net

import java.io.*;

public class training10 {
    // 최대 최소 항상 값을 양수로 유지하기 위함
    static int maxX, maxY, minX, minY, dir, x, y;
    static int dx[] = { 0, 1, 0, -1 };
    static int dy[] = { 1, 0, -1, 0 };

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        String move;

        // 위치 초기값
        for (int i = 0; i < N; i++) {
            move = br.readLine();
            // 초기값
            maxX = 0;
            maxY = 0;
            minX = 0;
            minY = 0;
            dir = 0;
            // 현재위치
            x = 0;
            y = 0;
            for (int j = 0; j < move.length(); j++) {
                char m = move.charAt(j);

                // 앞으로 한칸
                if (m == 'F') {
                    x += dx[dir];
                    y += dy[dir];
                    maxX = Math.max(x, maxX);
                    maxY = Math.max(y, maxY);
                    minX = Math.min(x, minX);
                    minY = Math.min(y, minY);
                }
                // 뒤로 한칸
                else if (m == 'B') {
                    x -= dx[dir];
                    y -= dy[dir];
                    maxX = Math.max(x, maxX);
                    maxY = Math.max(y, maxY);
                    minX = Math.min(x, minX);
                    minY = Math.min(y, minY);
                }
                // 방향 좌회전
                else if (m == 'L') {
                    if (dir == 0) {
                        dir = 3;
                    } else {
                        dir--;
                    }
                }
                // 방향 우회전
                else if (m == 'R') {
                    if (dir == 3) {
                        dir = 0;
                    } else {
                        dir++;
                    }
                }
            }
            int XX = maxX - minX;
            int YY = maxY - minY;
            sb.append(XX * YY + "\n");
        }
        System.out.println(sb);
    }
}

 

결과

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

49. 2178번 미로탐색  (0) 2022.01.05
48. 1303번 전쟁-전투  (0) 2022.01.05
46. 1141번 접두사  (0) 2021.12.31
45. 2293번 동전 1  (0) 2021.12.20
44. 1789번 수들의 합  (0) 2021.12.20