# 유형 : 시뮬레이션, 구현

# 난이도는 골드 4인데 어렵지 않은 문제였다. 좌표를 거꾸로 줬기 때문에 그거만 생각하여 북쪽으로 이동할때는 y좌표가 감소하는것이 아닌 증가, 남쪽으로 이동할 때는 y좌표가 감소하는 것만 생각하여 이동 좌표를 수정해주면 된다. 백준 홈페이지에는 없는 추가적인 테스트 케이스를 첨부하니 여러 케이스에 대하여 실행해보면 좋을 것 같다.

 

5 4

2 2

1 1 E

5 4 W

1 F 7

2 F 7 =====> Robot 1 crashes into the wall

 

5 4
2 4
1 1 E
5 4 W
1 F 3
2 F 1
1 L 1
1 F 3 ======> Robot 1 crashes into robot 2 

 

5 4
2 2
1 1 E
5 4 W
1 L 96
1 F 2 =======> OK 


5 4
2 3
1 1 E
5 4 W
1 F 4
1 L 1
1 F 20 =======> Robot 1 crashes into robot 2

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package bj;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class p2174 {
    static int A,B,N,M;
    static Robot[] robot;
    static boolean isTrue=false;
    static int check[][];
    static int moveX[] = {0,1,0,-1};
    static int moveY[] = {1,0,-1,0};
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        A = Integer.parseInt(st.nextToken());
        B = Integer.parseInt(st.nextToken());
        
        st = new StringTokenizer(br.readLine());
        N= Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        
        check = new int[B+1][A+1];
        robot = new Robot[N+1];
        for(int n=1; n<=N; n++) {
            st = new StringTokenizer(br.readLine());
            int x = Integer.parseInt(st.nextToken());
            int y = Integer.parseInt(st.nextToken());
            char dir = st.nextToken().charAt(0);
            int d=0;
            if(dir=='N')
                d = 0;
            else if(dir =='E')
                d = 1;
            else if(dir =='S')
                d = 2;
            else if(dir == 'W')
                d = 3;
            check[y][x] = n;
            robot[n] = new Robot(x,y,d);
        }
        for(int m=1; m<=M; m++) {
            
            st = new StringTokenizer(br.readLine());
            int num = Integer.parseInt(st.nextToken());
            char ch = st.nextToken().charAt(0);
            int iter = Integer.parseInt(st.nextToken());
            
            solve(num, ch, iter);
            if(isTrue)
                break;
            
        }
        if(!isTrue)
            System.out.println("OK");
        
    }
    
    
    
    private static void solve(int num, char ch, int iter) {
        // TODO Auto-generated method stub
        for(int it=0; it<iter; it++) {
            Robot rb = robot[num];
            if(ch == 'R' || ch =='L') {
                int nextDir = getDir(rb.dir, ch);
                robot[num] = new Robot(rb.x, rb.y, nextDir);
            }else if(ch == 'F') {
                int newX = rb.x + moveX[rb.dir];
                int newY = rb.y + moveY[rb.dir];
                if(1<=newX && newX<=&& 1<=newY && newY<=B) {
                    if(check[newY][newX] != 0) {
                        System.out.println("Robot "+num +" crashes into robot " + check[newY][newX]);
                        isTrue = true;
                        return;
                    }else {
                        check[rb.y][rb.x] = 0;
                        check[newY][newX] = num;
                        robot[num] = new Robot(newX, newY, rb.dir);
                    }
                }else {
                    System.out.println("Robot "+num+" crashes into the wall");
                    isTrue = true;
                    return;
                }
            }
        }
    }
    
    public static int getDir(int dir, char ch) {
        
        if(ch == 'L') {
            if(dir == 0){
                dir = 3;
            }else {
                dir--;
            }
            
        }else if(ch == 'R') {
            if(dir==3) {
                dir = 0;
            }else {
                dir++;
            }
        }
        return dir;
    }
 
 
 
    public static class Robot{
        int x;
        int y;
        int dir;
        public Robot(int x, int y, int dir) {
            this.x=x;
            this.y=y;
            this.dir=dir;
        }
    }
}
 
cs

+ Recent posts