본문 바로가기
Algorithm Study/BaekJoon (JAVA)

백준 8911_거북이_JAVA

by 창브로 2024. 4. 18.
728x90

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

 

8911번: 거북이

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

www.acmicpc.net

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int T = Integer.parseInt(br.readLine()); // 테스트 케이스

        for (int i = 0; i < T; i++) {
            char[] moveArr = br.readLine().toCharArray();
            int maxX = 0, maxY = 0, minX = 0, minY = 0; // 모든 이동하는 부분에서 최대 최소 x,y를 구함
            int nowDirection = 0;
            int[] dx = {1, 0, -1, 0}; // 북 동 남 서 순서
            int[] dy = {0, 1, 0, -1};
            int startX = 0;
            int startY = 0;

            for (int j = 0; j < moveArr.length; j++) {
                switch (moveArr[j]) {
                    case 'F':
                        startX += dx[nowDirection];
                        startY += dy[nowDirection];
                        break;
                    case 'B':
                        // 뒤로가니 빼주기
                        startX -= dx[nowDirection];
                        startY -= dy[nowDirection];
                        break;
                    case 'L': // 북쪽(0)에서 왼쪽으로 돌면 서쪽(3)
                        if (nowDirection == 0) {
                            nowDirection = 3;
                        } else {
                            // 나머지는 -1하면 방향이 왼쪽으로 바뀜
                            nowDirection--;
                        }
                        break;
                    case 'R':// 서쪽(3)에서 오른쪽으로 돌면 북쪽(0)
                        if (nowDirection == 3) {
                            nowDirection = 0;
                        } else {
                            // 나머지는 +1하면 방향이 오른쪽으로 바뀜
                            nowDirection++;
                        }

                        break;
                }
                maxX = Math.max(maxX, startX);
                maxY = Math.max(maxY, startY);
                minX = Math.min(minX, startX);
                minY = Math.min(minY, startY);
            }
            System.out.println((Math.abs(maxX) + Math.abs(minX)) * (Math.abs(maxY) + Math.abs(minY)));
        }
    }
}

 

회고

- 방향 설정이 계속 잘못되어서 애를 좀 먹었다.

- 구현 문제는 손으로 계속 적고 시도해봐야 빨리 풀리는 것 같다.

'Algorithm Study > BaekJoon (JAVA)' 카테고리의 다른 글

백준 14502_연구소_JAVA  (0) 2024.04.21
백준 15686_치킨 배달_JAVA  (1) 2024.04.21
백준 2578_빙고_JAVA  (0) 2024.04.18
백준 10709_기상캐스터_JAVA  (0) 2024.04.17
백준 2167_ 2차원 배열의 합_JAVA  (0) 2024.04.15