Post

[swea-D2] 22654. 차윤이의 RC카

# [swea-D2] 22654. 차윤이의 RC카

문제

6살 차윤이는 생일선물로 RC카를 선물받았다. 아직 조종이 익숙하지 않은 차윤이는 공원에서 조종 연습을 하려고 한다.

아래는 차윤이가 조종을 연습할 N x N 필드의 정보이다.

1
2
3
4
5
GGGGG
GXGTG
GGTTG
GGGYG
GTGGG

‘G’ : RC카가 이동 가능한 땅 ‘T’ : RC카가 이동이 불가능한 나무

‘X’ : 현재 RC카의 위치 ‘Y’ : RC카를 이동 시키고자 하는 위치

RC카의 조종기로는 아래의 동작들을 할 수 있다.

‘A’ : 앞으로 이동 - 나무가 있는 곳이나 필드를 벗어나는 경우에는 아무 일도 일어나지 않는다.

‘L’ : 현재 바라보고 있는 방향에서 왼쪽으로 90도 회전

‘R’ : 현재 바라보고 있는 방향에서 오른쪽으로 90도 회전

차윤이는 RC카를 항상 위를 바라보는 방향으로 부터 조종을 시작한다. 차윤이가 RC카를 조종한 커맨드가 주어졌을 때, 목적지에 도달 할 수 있는지 구하라. (커맨드가 종료되었을 때, 목적지에 위치 해 있어야 한다.)

입력

1
2
3
4
5
6
7
첫번째 줄에는 테스트 케이스의 개수 T가 주어진다. (1 <= T <= 10) 
각 테스트 케이스의 첫번째 줄에 필드의 크기 N이 주어진다. (2 <= N <= 5)
두번째 줄부터 N개의 줄에 걸쳐 필드의 정보가 공백 없이 주어진다.

필드의 정보는 본문의 설명을 참고하라. 
다음 줄에는 조종을 한 횟수 Q가 주어진다. (1 <= Q <= 5)
다음 Q개의 줄에는 커맨드의 길이 C와 커맨드가 공백으로 구분되어 주어진다. (1 <= C <= 50)

출력

1
2
3
4
5
6
T개의 줄에 걸쳐 각 테스트 케이스에 대한 정답을 출력한다.
각 줄은 "#t"로 시작하고 (t는 1부터 시작하는 테스트 케이스의 번호를 의미한다.) 공백을 하나 둔 후, 정답을 출력한다. 

각 테스트케이스의 커맨드마다 목적지에 도달 할 수 있다면 1, 아니면 0을 공백으로 구분하여 출력한다.
목적지에 이동 가능 여부가 아닌, 커맨드를 전부 실행 후 목적지에 도달했는지를 
확인해야 함에 유의하라.

입력

1
2
3
4
5
6
7
8
9
10
11
1
5
GGGGG
GXGTG
GGTTG
GGGYG
GTGGG
3
7 RRAALAA
8 RRAALAAA
12 RAARRALAALAA

출력

1
#1 1 0 1




🙋‍♂️ 들어가며

논리를 잘 구성해놓고 바보같이 마지막 줄에 줄바꿈을 안해서 계속 제출 실패를 했다

줄바꿈을 하지않으면 이렇게 되는 상황이었다 (다음은 예시다)

1
#1 1 0 1#2 0 1 1

필요한 출력형태는 다음과 같았다

1
2
#1 1 0 1
#2 0 1 1


✅ 코드

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
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;



public class Solution {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int T = Integer.parseInt(br.readLine());
		for (int tc = 1; tc < T+1; tc++) {
			int N = Integer.parseInt(br.readLine());
			char[][] original_arr = new char[N][N];
			
			
			// 1-1. 시작점, 끝점
			int sr = 0;
			int sc = 0;
			int er = 0;
			int ec = 0;
			for (int r = 0; r < N; r++) {
				String s = br.readLine();
				for (int c = 0; c < s.length(); c++) {
					original_arr[r][c] = s.charAt(c);
					if (original_arr[r][c] == 'X') {
						sr = r;
						sc = c;
					}
					if (original_arr[r][c] == 'Y') {
						er = r;
						ec = c;
					}
				}
			}
			
			// 1-2. 초기 출력형태 생성
			System.out.print("#" + tc + " ");
			
			
			
			// 2. commands
			int Q = Integer.parseInt(br.readLine());
			for (int i = 0; i < Q; i++) {
				
				// 2-1. 매번 좌표 초기화
				char[][] arr = original_arr;
				
				String[] str = br.readLine().split(" ");
				int leng = Integer.parseInt(str[0]);
				String command_arr = str[1];
				char[] commands = new char[leng];
				for (int j = 0; j < leng; j++) {
					commands[j] = command_arr.charAt(j);
				}
				
				// 2-2. 초기 방향 (위쪽)
				int d = 0;
				int cr = sr;
				int cc = sc;
				
				for (int j = 0; j < leng; j++) {
					char cur_button = commands[j];
					int dr = 0;
					int dc = 0;
					
					// 2-3. 방향 설정
					if (d == 0 && cur_button == 'A') {
						dr = -1;
						dc = 0;
					}
					else if (d == 1 && cur_button == 'A') {
						dr = 0;
						dc = 1;
					}
					else if (d == 2 && cur_button == 'A') {
						dr = 1;
						dc = 0;
					}
					else if (d == 3 && cur_button == 'A') {
						dr = 0;
						dc = -1;
					}
					else if (cur_button == 'R') {
						d = (d+1) % 4;
						continue;
					}
					else if (cur_button == 'L') {
						d = ( (d-1) + (4) ) % 4;
						continue;
					}
					
					// 2-4. 칸 확인 (범위 가능한지)
					int nr = cr + dr;
					int nc = cc + dc;
					
					if (nr < 0 || nr >= N || nc < 0 || nc >= N) continue;
					
					// 2-5. 지나갈 수 있는 칸인지?
					// 2-5-a 나무라면 skip
					if (arr[nr][nc] == 'T') continue;
					
					// 2-5-b 빈공간이면 이동
					if (arr[nr][nc] == 'G' || arr[nr][nc] == 'Y' || arr[nr][nc] == 'X') {
						cr = nr;
						cc = nc;
					}
				}
				
				
				// 3. 검사
				if (cr == er && cc == ec) {
					System.out.print(1 + " ");
				}
				else System.out.print(0 + " ");
			}
			
			// 4. 줄바꿈
			System.out.println();
			
		}
		
	}
}
This post is licensed under CC BY 4.0 by the author.

Trending Tags

도움이 필요하면
나를 눌러 구리🐻
챗봇
너굴
bot
어서와 구리 ʕ ·ᴥ·ʔ
무엇이 필요하셔 구리?

Trending Tags

도움이 필요하면
나를 눌러 구리🐻
챗봇
너굴
bot
어서와 구리 ʕ ·ᴥ·ʔ
무엇이 필요하셔 구리?