코딩하는 해맑은 거북이

[Python] 미로 만들기 - 백준 본문

코딩테스트

[Python] 미로 만들기 - 백준

#CJE 2023. 1. 6.
해당 글은 백준 1347번 문제 '미로 만들기'을 다룬다.

문제

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

 

1347번: 미로 만들기

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

www.acmicpc.net

 

설명

홍준이가 적은 내용의 길이는 0보다 크고 50보다 작다. 그리고 모든 행과 열에 적어도 하나 이동할 수 있는 칸이 있다.

그러므로 행으로 최대 50칸, 열로도 최대 50칸 갈 수 있다.

그래서 임의의 지도를 100x100 생성한 후, 시작지점의 좌표를 50, 50으로 설정한 후 이동하면 된다.

그리고 이동한 최대 x, 최대 y, 최소 x, 최소 y 값 좌표를 저장해둔 후 출력할 때 이를 이용해서 미로 지도를 출력한다.

 

코드

n = int(input())
move = list(input())

# 남서북동
dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]

now_dir = 0
x, y = 50, 50
result_map = [[0 for _ in range(101)] for _ in range(101)]
result_map[x][y] = 1
max_x, max_y, min_x, min_y = x, y, x, y

for m in move:
    if m == 'R':
        now_dir = (now_dir+1)%4
    if m == 'L':
        now_dir = (now_dir+3)%4
    if m == 'F':
        x = x+dx[now_dir]
        y = y+dy[now_dir]
        result_map[x][y] = 1
        max_x, max_y = max(max_x, x), max(max_y, y)
        min_x, min_y = min(min_x, x), min(min_y, y)

for i in range(min_x, max_x+1):
    for j in range(min_y, max_y+1):
        if result_map[i][j] == 1:
            print('.', end='')
        else:
            print('#', end='')
    print()

     

 

 

Comments