코테/백준

[백준/JAVA] 8911번: 거북이

imname1am 2024. 3. 27. 14:26
반응형

📖 문제

 

8911번: 거북이

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

www.acmicpc.net

 

 

💡  풀이 방식

• 구현, 시뮬레이션

가장 멀리 위치한 두 점을 구하기 위해, 가장 작은 x와 y, 가장 큰 x와 y를 구한다.

그리고 Math.abs(maxX - maxY) * (minX - minY) 한 결과를 구해 출력한다.

 

 

🔺 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.util.*;
import java.io.*;
 
public class Main {
    static int[] dx = {0-101};    // 북서남동
    static int[] dy = {10-10};
    
    static int T;
    static StringBuilder sb = new StringBuilder();
    
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        T = Integer.parseInt(br.readLine());
        
        while(T --> 0) {
            move(br.readLine().toCharArray());
        }
        
        System.out.println(sb.toString());
    }
    
    private static void move(char[] ch) {
        int x = 0;
        int y = 0;
        int dir = 0;
        int minX=x, minY=y, maxX=x, maxY=y;
        
        for(char c : ch) {
            if(c == 'F') {    // 한 눈금 앞으로
                x += dx[dir];
                y += dy[dir];
            }
            else if(c == 'B') {    // 한 눈금 뒤로
                int tmpDir = (dir + 2) % 4;
                x += dx[tmpDir];
                y += dy[tmpDir];
            }
            else if(c == 'L') {    // 왼쪽으로 90도 회전
                dir = (dir + 1) % 4;
            }
            else if(c == 'R') {    // 오른쪽으로 90도 회전
                dir = (dir - 1 + 4) % 4;
            }
            
            // 가장 작고 큰 x,y값 갱신하기
            minX = Math.min(minX, x);
            minY = Math.min(minY, y);
            maxX = Math.max(maxX, x);
            maxY = Math.max(maxY, y);
        }
 
        sb.append(Math.abs(minX - maxX) * Math.abs(minY - maxY)).append("\n");
    }
}
 
 
cs

 

 


💦 어려웠던 점

- 거북이가 이동하면서 지난 모든 점을 리스트에 넣고 그 중 2객의 거리의 최댓값을 구하려고 했는데 그게 아니고,

그냥 이동하면서 가장 작은 x와 y, 가장 큰 x와 y를 구해 Math.abs(maxX - maxY) * (minX - minY) 한 결과를 구하면 된다.

- 이렇게 쉬운 문제를 헷갈리고 오래 걸리다니,,,,,,,, 반성해라 진짜

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

 

백준 8911번 거북이 [JAVA]

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

javaju.tistory.com

 

반응형