반응형

https://www.acmicpc.net/problem/1347

 

1347번: 미로 만들기

홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍

www.acmicpc.net

 

50개의 이동을 감당할 수 있는 충분한 크기의 배열을 잡고, 모두 '#'으로 초기화해줍니다.

배열의 정중앙을 시작점으로 잡고, 주어지는 연산으로 이동을 수행해주었습니다.

이동했던 지점들은 모두 '.' 으로 바꿔주면서, 그 지점들의 가장 북서 좌표와 남동 좌표를 기억해주었습니다.

북서, 남동 좌표 내의 지점들을 출력해주면 됩니다.

 

#include <iostream>
#include <algorithm>
#include <cstring>
#define MAX 50
using namespace std;

int dx[] = {1, 0, -1, 0}; // 남동북서
int dy[] = {0, 1, 0, -1};

int n, tlx = MAX, tly = MAX, brx = MAX, bry = MAX;
int x = MAX, y = MAX, dir = 0;
char op, map[MAX * 2 + 1][MAX * 2 + 1];
int main() {
	memset(map, '#', sizeof(map));
	map[50][50] = '.';
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf(" %c", &op);
		if (op == 'R') dir = (dir + 3) % 4;
		else if (op == 'L') dir = (dir + 1) % 4;
		else {
			x += dx[dir];
			y += dy[dir];
			tlx = min(tlx, x);
			tly = min(tly, y);
			brx = max(brx, x);
			bry = max(bry, y);
			map[x][y] = '.';
		}
	}
	for (int i = tlx; i <= brx; i++) {
		for (int j = tly; j <= bry; j++) {
			printf("%c", map[i][j]);
		}
		printf("\n");
	}
}
반응형

'Algorithm' 카테고리의 다른 글

백준 1464 : 뒤집기 3  (0) 2021.11.19
백준 4358 : 생태학  (0) 2021.11.19
백준 2669 : 직사각형 네개의 합집합의 면적 구하기  (0) 2021.11.19
백준 1535 : 안녕  (0) 2021.11.19
백준 1451 : 직사각형으로 나누기  (0) 2021.11.19

+ Recent posts