알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 미로 만들기(1347)

HRuler 2023. 2. 5. 16:14

1. 문제

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

 

1347번: 미로 만들기

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

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline
from collections import deque

# n : 행동 수
n = int(input())
# direc : 바라보는 방향
direc = "S"
# c_p : 현재 위치
c_p = [0, 0]

miro = deque([deque(['.'])])
order = input()
for i in order:
    #print('order :', i)
    if i == "R":
        if direc == "S":
            direc = "W"
        elif direc == "W":
            direc = "N"
        elif direc == "N":
            direc = "E"
        elif direc == "E":
            direc = "S"
    elif i == "L":
        if direc == "S":
            direc = "E"
        elif direc == "E":
            direc = "N"
        elif direc == "N":
            direc = "W"
        elif direc == "W":
            direc = "S"
    elif i == "F":
        if direc == "S":
            if c_p[0] == (len(miro) - 1):
                ap_str = deque()
                for j in range(len(miro[0])):
                    if j == c_p[1]:
                        ap_str.append('.')
                    else:
                        ap_str.append('#')
                miro.append(ap_str)
                c_p[0] += 1
            else:
                c_p[0] += 1
                miro[c_p[0]][c_p[1]] = '.'
        elif direc == "W":
            if c_p[1] == 0:
                for j, v in enumerate(miro):
                    if j == c_p[0]:
                        v.appendleft(".")
                    else:
                        v.appendleft("#")
            else:
                c_p[1] -= 1
                miro[c_p[0]][c_p[1]] = '.'
        elif direc == "N":
            if c_p[0] == 0:
                ap_str = deque()
                for j in range(len(miro[0])):
                    if j == c_p[1]:
                        ap_str.append('.')
                    else:
                        ap_str.append('#')
                miro.appendleft(ap_str)
            else:
                c_p[0] -= 1
                miro[c_p[0]][c_p[1]] = '.'
        elif direc == "E":
            if c_p[1] == (len(miro[0]) - 1):
                for j, v in enumerate(miro):
                    if j == c_p[0]:
                        v.append(".")
                    else:
                        v.append("#")
                c_p[1] += 1
            else:
                c_p[1] += 1
                miro[c_p[0]][c_p[1]] = '.'
    #print("direc :", direc)
    #print("c_p :", c_p)
    #print("Miro")
for i in miro:
    for j in i:
        print(j, end="")
    print("")