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 |