반응형
리뷰
RC카의 움직임을 각 쿼리문으로 제어하고 최종 위치가 목적지인지 확인하는 문제
전역변수
- tc : 테스트 케이스의 개수
- n, q : 맵의 한 변이 길이 n, RC카를 조종하는 횟수의 개수 q
- sx, sy, dx, dy : 시작 위치와 도착 위치의 x, y 좌표
- lst : 맵 정보, 문자열로 입력받으며 최대 5 * 5의 크기
- dx, dy : 상하좌우로 이동할 방향 배열, 0번 인덱스부터 3번인덱스까지 북동남서 방향으로 세팅한다.
함수
1. input
void input()
- 한 변의 개수를 입력 받고 n * n의 맵 정보를 입력 받아준다.
- 위치가 X일 경우 시작 위치의 좌표를 sx, sy에 저장하고 Y일 경우 도착 위치의 좌표를 ex, ey에 저장해 준다.
- 맵 정보와 시작, 도착위치를 모두 입력 받은 뒤 RC카 이동의 쿼리의 개수 q를 입력 받아준다.
2. solution
void solution()
- q번의 쿼리에 RC카를 조작하는 커맨드를 입력 받는다. l은 커맨드의 개수 s는 순차 실행 커맨드 정보이다.
- 시작 위치를 별도의 변수 cx, cy로 초기화 해주고 초기 방향은 북쪽을 보고 있으니 cd는 0으로 초기화 한다.
- 커맨드를 앞에서부터 순차적으로 수행한다.
- R이 주어질 경우 현재 바라보고 있는 방향에서 왼쪽으로 90도 회전, 현재 방향에서 +5을 하고 4로 나눈 나머지이다.
- L이 주어질 경우 현재 바라보고 있는 방향에서 오른쪽으로 90도 회전, 현재 방향에서 +3을 하고 4로 나눈 나머지이다.
- A가 주어질 경우 현재 바라보고 있는 방향으로 전진한다. 다음 위치가 범위를 벗어나거나 나무일 경우 이동하지 않는다.
- 이동을 완료했다면 현재 위치를 변경해 준다.
- 각 쿼리 마다 모든 커맨드를 수행했을때 최종적으로 도착 위치에 있다면 1을, 아니라면 0을 출력한다.
정답 코드
#include<iostream>
using namespace std;
int tc, n, q, sx, sy, ex, ey;
string lst[5];
int dx[] = { -1, 0, 1, 0 };
int dy[] = { 0, 1, 0, -1 };
void input() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> lst[i];
for (int j = 0; j < n; j++) {
if (lst[i][j] == 'X') sx = i, sy = j;
else if (lst[i][j] == 'Y') ex = i, ey = j;
}
}
cin >> q;
}
void solution() {
while (q--) {
int l; string s;
cin >> l >> s;
int cx = sx, cy = sy, cd = 0;
for (int i = 0; i < l; i++) {
if (s[i] == 'R') cd = (cd + 5) % 4;
else if (s[i] == 'L') cd = (cd + 3) % 4;
else {
int nx = cx + dx[cd], ny = cy + dy[cd];
if (0 <= nx && nx < n && 0 <= ny && ny < n && lst[nx][ny] != 'T') cx = nx, cy = ny;
}
}
if (cx == ex && cy == ey) cout << " 1";
else cout << " 0";
}
cout << "\n";
}
int main() {
cin >> tc;
for (int t = 1; t <= tc; t++) {
cout << "#" << t;
input();
solution();
}
}
728x90
반응형
'알고리즘 공부 > C++' 카테고리의 다른 글
[G3] 백준 14725번 개미굴 C++ 트라이, 문자열 (1) | 2024.10.06 |
---|---|
[G3] 백준 17299번 오등큰수 C++ 스택 (0) | 2024.10.05 |
[S1] 백준 11403번 경로 찾기 C++ 플로이드 와샬, 최단 경로 (0) | 2024.10.04 |
[G4] 백준 11404번 플로이드 C++ 플로이드 와샬, 최단 경로 (0) | 2024.10.04 |
[G5] 백준 1759번 암호 만들기 C++ 백트래킹 (1) | 2024.10.03 |