Coding_Test_C++

BaekJoon 1347번: 미로 만들기(C++)

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

 

1347번: 미로 만들기

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

www.acmicpc.net

풀이법

1) 구현을 하는 문제이며, 출력에 신경써야 하는 부분이 존재한다. 출력시에 arr[i][j]와 arr[i][j+1] 사이의 공백 없이 출력을 진행해야 정답으로 인정된다.

2) 가장 중요하다고 생각한 부분은 배열의 크기이다. 필자는 arr[101][101]을 두었고, 시작점을 x=50,y=50으로 두었다. 실제 초기 방향이 남쪽인데 50개의 초기 문자열이 모두 'F'인 경우를 고려한다면 arr의 크기가 100x100은 되어야 한다고 생각했기에 위의 설명과 같은 코딩을 진행했다.

3) 방문한 X값과 Y값의 최소와 최대값을 반복문과 동시에 찾아둠으로서 배열을 출력했고, 배열 index 안의 값이 '.'이 아닌 경우 '#'을 넣어줌으로서 정답을 얻을 수 있었다.

#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <queue>
#define INF 987654321
using namespace std;

string s;
char arr[101][101];
int main()
{
	cin.tie(0);
	ios::sync_with_stdio(false);
	int n;
	cin >> n;
	cin >> s;
	arr[50][50] = '.';
	int dX = 1;
	int dY = 0;
	int nowX = 50;
	int nowY = 50;
	int minX=50, minY = 50;
	int maxX=50, maxY = 50;
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] == 'R')
		{
			if (dX == 1 && dY == 0)// 남
			{
				dX = 0;//서
				dY = -1;
			}
			else if (dX ==0 && dY == 1)//동
			{
				dX = 1;//남
				dY = 0;
			}
			else if (dX == -1 && dY == 0)//북
			{
				dX = 0;//동
				dY = 1;
			}
			else//서
			{
				dX = -1;//북
				dY = 0;
			}
		}
		else if (s[i] == 'L')
		{
			if (dX == 1 && dY == 0)// 남
			{
				dX = 0; // 동
				dY = 1;
			}
			else if (dX == 0 && dY == 1)//동
			{
				dX = -1; //북
				dY = 0;
			}
			else if (dX == -1 && dY == 0)//북
			{
				dX = 0;// 서
				dY = -1;
			}
			else//서
			{
				dX = 1;//남
				dY = 0;
			}
		}
		else if (s[i] == 'F')
		{
			arr[nowX + dX][nowY + dY] = '.';
			nowX = nowX + dX;
			nowY = nowY + dY;
			minX = min(minX, nowX);
			maxX = max(nowX, maxX);
			minY = min(minY, nowY);
			maxY = max(maxY, nowY);
		}
	}
	for (int i = minX; i <= maxX; i++)
	{
		for (int j = minY; j <= maxY; j++)
		{
			if (arr[i][j] != '.')
				arr[i][j] = '#';
		}
	}
	for (int i = minX; i <= maxX; i++)
	{
		for (int j = minY; j <= maxY; j++)
		{
			cout << arr[i][j];
		}
		cout << endl;
	}
}