

구현
단순무식하게 코드를 짜보았다.
거북이 처음위치를 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 |