알고리즘 공부/C++

[D2] SWEA 22654번 차윤이의 RC카 C++ 구현, 시뮬레이션

마달랭 2024. 10. 4. 17:28
반응형

리뷰

 

RC카의 움직임을 각 쿼리문으로 제어하고 최종 위치가 목적지인지 확인하는 문제

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

전역변수

  • tc : 테스트 케이스의 개수
  • n, q : 맵의 한 변이 길이 n, RC카를 조종하는 횟수의 개수 q
  • sx, sy, dx, dy : 시작 위치와 도착 위치의 x, y 좌표
  • lst : 맵 정보, 문자열로 입력받으며 최대 5 * 5의 크기
  • dx, dy : 상하좌우로 이동할 방향 배열, 0번 인덱스부터 3번인덱스까지 북동남서 방향으로 세팅한다.

 

함수

1. input

void input()

 

  1. 한 변의 개수를 입력 받고 n * n의 맵 정보를 입력 받아준다.
  2. 위치가 X일 경우 시작 위치의 좌표를 sx, sy에 저장하고 Y일 경우 도착 위치의 좌표를 ex, ey에 저장해 준다.
  3. 맵 정보와 시작, 도착위치를 모두 입력 받은 뒤 RC카 이동의 쿼리의 개수 q를 입력 받아준다.

 

2. solution

void solution()

 

  1. q번의 쿼리에 RC카를 조작하는 커맨드를 입력 받는다. l은 커맨드의 개수 s는 순차 실행 커맨드 정보이다.
  2. 시작 위치를 별도의 변수 cx, cy로 초기화 해주고 초기 방향은 북쪽을 보고 있으니 cd는 0으로 초기화 한다.
  3. 커맨드를 앞에서부터 순차적으로 수행한다.
  4. R이 주어질 경우 현재 바라보고 있는 방향에서 왼쪽으로 90도 회전, 현재 방향에서 +5을 하고 4로 나눈 나머지이다.
  5. L이 주어질 경우 현재 바라보고 있는 방향에서 오른쪽으로 90도 회전, 현재 방향에서 +3을 하고 4로 나눈 나머지이다.
  6. A가 주어질 경우 현재 바라보고 있는 방향으로 전진한다. 다음 위치가 범위를 벗어나거나 나무일 경우 이동하지 않는다.
  7. 이동을 완료했다면 현재 위치를 변경해 준다.
  8. 각 쿼리 마다 모든 커맨드를 수행했을때 최종적으로 도착 위치에 있다면 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
반응형