문제
홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다. 미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다. 모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다. 홍준이는 미로에서 모든 행과 열의 이동할 수 있는 칸을 걸어다녔다. 그러면서 자신의 움직임을 모두 노트에 쓰기로 했다. 홍준이는 미로의 지도를 자기 노트만을 이용해서 그리려고 한다.
입력으로 홍준이가 적은 내용이 주어진다. 문자열로 이루어져 있으며, 모든 문자 하나는 한 번의 움직임을 말한다. ‘F’는 앞으로 한 칸 움직인 것이고, ‘L'과 ’R'은 방향을 왼쪽 또는 오른쪽으로 전환한 것이다. 즉, 90도를 회전하면서, 위치는 그대로인 것이다.
입력
첫째 줄에 홍준이가 적은 내용의 길이가 주어진다. 길이는 0보다 크고, 50보다 작다. 둘째 줄에 그 내용이 주어진다.
출력
첫째 줄에 미로 지도를 출력한다. ‘.’은 이동할 수 있는 칸이고, ‘#’는 벽이다.
예제 입력 1 복사
5 RRFRF
예제 출력 1 복사
.. .#
홍준이 움직이는 문자열을 보고 미로를 만드는 문제이다.
시작점에서 홍준이 어디로 이동할 지 모르므로 시작점을 맵의 중간지점으로 해야한다.
또한 맵의 최대 크기도 가능한 최대 길이인 51의 두배 이상으로 해줘야 한다.
나는 대략 [110][110]정도로 2차원 배열을 설정해 55,55를 시작점으로 했다.
그리고 맵 전체를 #으로 채워서 홍준이가 이동하는 부분만 . 으로 바꿔준다.
그 후 시작점에서 문제 조건에 맞게 R, L 전환과 F 이동을 구현해준다.
말했듯이 시작점과 끝점을 알 수 없기 때문에 이를 구하기 위해 minX,Y 와 maxX,Y를 수시로 업데이트하며 지도의 시작, 끝점을 구한다. 다 구하고 나서 미로를 출력하면 끝이다.
틀릴 수 있는 요소는 minX,Y와 maxX,Y의 초기값을 홍준의 시작지점 좌표로 해야 한다는 점이다. 안했다가 틀렸습니다가 떴다. 또한 동서남북 이동 방향에 따른 dir 표기를 주의하자.
chosh95/STUDY
프로그래밍 문제 및 알고리즘 정리. Contribute to chosh95/STUDY development by creating an account on GitHub.
github.com
C++ 코드
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
string str;
int N, dir;
int dx[4] = { 1,0,-1,0 }; //dir = 0,1,2,3 일때 이동방향
int dy[4] = { 0,-1,0,1 };
char p[110][110];
int main()
{
cin >> N;
cin >> str;
for (int i = 0; i < 110; i++)
for (int j = 0; j < 110; j++)
p[i][j] = '#';
int x = 55, y = 55; //홍준이의 현재 위치
int minX = 55, maxX = 55, minY = 55, maxY = 55;
p[x][y] = '.';
for (int i = 0; i < str.size(); i++) {
if (str[i] == 'R') {
dir++;
if (dir > 3) dir = 0;
}
else if (str[i] == 'L') {
dir--;
if (dir < 0) dir = 3;
}
else {
x += dx[dir];
y += dy[dir];
p[x][y] = '.';
}
minX = min(x, minX);
minY = min(y, minY);
maxX = max(x, maxX);
maxY = max(y, maxY);
}
for (int i = minX; i <= maxX; i++) {
for (int j = minY; j <= maxY; j++) {
cout << p[i][j];
}
if(i!=maxX) cout << "\n";
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 수2 (1059번) (0) | 2020.06.27 |
---|---|
[백준] 로봇 (1726번) (0) | 2020.06.26 |
[백준] 적어도 대부분의 배수 (1145번) (0) | 2020.06.25 |
[백준] 데이트 (1296번) (0) | 2020.06.23 |
[백준] 핸드폰 요금 (1267번) (0) | 2020.06.23 |