코딩하는 해맑은 거북이
[Python] 미로 만들기 - 백준 본문
해당 글은 백준 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()
'코딩테스트' 카테고리의 다른 글
[Python] 안전 영역 - 백준 (DFS) (0) | 2023.01.09 |
---|---|
[Python] 스택 수열 - 백준 (0) | 2023.01.09 |
[Python] 좌표 압축 - 백준 (0) | 2023.01.05 |
[Python] 카드 구매하기 - 백준 (DP) (0) | 2023.01.05 |
[Python] 스타트와 링크 - 백준 (DFS) (0) | 2023.01.04 |
Comments