백준 1347 미로 만들기 python

gobeul·2023년 11월 7일

알고리즘 풀이

목록 보기
60/70
post-thumbnail

와! 되게 재밌는 문제였다. 미로를 탈출하는게 아니고 이동값을 보고 미로를 직접 만드는 문제라니

📜 문제 바로 가기 : 미로 만들기

제출코드

파이썬

import sys
input = sys.stdin.readline

delta = [(1, 0), (0, -1), (-1, 0), (0, 1)]

N = int(input())
command = input().rstrip()
MAP = [["."]]

def addMap():
    global MAP, i, j
    if now == 0: # 아래
        if i == len(MAP):
            block = ["#"] * len(MAP[0])
            block[j] = "."
            MAP.append(block)
    
    elif now == 1: # 왼쪽
        if j == -1:
            j = 0
            for a in range(len(MAP)):
                MAP[a] = ["#"] + MAP[a]
    
    elif now == 2: # 위쪽:
        if i == -1:
            i = 0
            block = ["#"] * len(MAP[0])
            MAP = [block] + MAP
    
    else: # 오른쪽
        if j == len(MAP[0]):
            for a in range(len(MAP)):
                MAP[a].append("#")
    
    MAP[i][j] = "."


now = 0
i, j = 0, 0
for c in command:
    if c == "R":
        now = (now + 1) % 4
    elif c == "L":
        now -= 1
        if now == -1:
            now = 3
    else:
        i += delta[now][0]
        j += delta[now][1]
        addMap()

for i in range(len(MAP)):
    for j in range(len(MAP[0])):
        print(MAP[i][j], end = "")
    print()

접근방법

now 변수에 내 방향을 저장해주고
각 방향으로 이동시에 인덱스를 벗어난 이동이라면 맵이 확장됨을 의미하므로 적절하게 미로를 확장시켜 풀었다.
명령어 횟수가 최대 50이라서 시간을 생각하지 않았지만 횟수가 커진다면 미로를 확장하는데 있어 효율을 좀 생각해봐야될거 같다.

profile
뚝딱뚝딱

0개의 댓글