💡 문제 해결
- 초기 위치와 바라보는 방향 설정 및 이동했던 좌표를 저장할 리스트를 생성
- 명령어를 하나씩 수행하며 위치 좌표와 방향을 변경하며 이동했던 좌표를 저장
- 이동하면서 찍힌 좌표의 최대값과 최소값의 차이로 최대 변의 길이를 계산
- 계산된 크기로 이차원배열을 생성 후 이동했던 좌표의 정보를 바탕으로 미로 완성
- 완성된 미로를 출력
🧾 문제 설명
홍준이는 미로 안의 한 칸에 남쪽을 보며 서있다.
미로는 직사각형 격자모양이고, 각 칸은 이동할 수 있거나, 벽을 포함하고 있다.
모든 행과 열에는 적어도 하나의 이동할 수 있는 칸이 있다.
홍준이는 미로에서 모든 행과 열의 이동할 수 있는 칸을 걸어다녔다.
그러면서 자신의 움직임을 모두 노트에 쓰기로 했다.
홍준이는 미로의 지도를 자기 노트만을 이용해서 그리려고 한다.
입력으로 홍준이가 적은 내용이 주어진다. 문자열로 이루어져 있으며, 모든 문자 하나는 한 번의 움직임을 말한다.
‘F’는 앞으로 한 칸 움직인 것이고, ‘L'과 ’R'은 방향을 왼쪽 또는 오른쪽으로 전환한 것이다.
즉, 90도를 회전하면서, 위치는 그대로인 것이다.
문제보기
🖨 입출력
📝 풀이
dx, dy = [-1, 0, 1, 0], [0, 1, 0, -1]
command_length = int(input())
commands = input()
dir = 2
pos = [0, 0]
x_list = [0]
y_list = [0]
for command in commands:
if command == 'L':
dir = (dir - 1) % 4
elif command == 'R':
dir = (dir + 1) % 4
elif command == 'F':
x, y = pos
nx, ny = x + dx[dir], y + dy[dir]
x_list.append(nx)
y_list.append(ny)
pos = [nx, ny]
max_x, min_x, max_y, min_y = max(x_list), min(x_list), max(y_list), min(y_list)
N, M = max_x - min_x + 1, max_y - min_y + 1
start_x, start_y = abs(min_x), abs(min_y)
maze = [['#'] * M for _ in range(N)]
for x, y in zip(x_list, y_list):
maze[start_x + x][start_y + y] = '.'
for line in maze:
print("".join(line))