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("")
'알고리즘 공부 > 백준' 카테고리의 다른 글
(Python)백준 코딩테스트 연습 - 시리얼 번호(1431) (0) | 2023.02.10 |
---|---|
(Python)백준 코딩테스트 연습 - 토너먼트 승자(1404) (0) | 2023.02.09 |
(Python)백준 코딩테스트 연습 - 팰린드롬 만들기(1213) (0) | 2023.02.01 |
(Python)백준 코딩테스트 연습 - 약속(1183) (0) | 2023.01.31 |
(Python)백준 코딩테스트 연습 - 선물(1166) (0) | 2023.01.28 |