사용 언어 - Python3
문제 - 미로 만들기
정답
최대 x,y 값 구하고, 2차원 배열 만들기 (정답 맞춘 여부 X)
1. loc_list (0,0)에서 시작해서 이동한 값 x,y에 저장하기
R 명령어) 방향을 오른쪽으로 전환 -> status+1 한 후 4로 나누어 몇번째 원소인지 찾기 (status+1)%4
L 명령어) 방향을 왼쪽으로 전환 -> status가 0이 아니라면, status-1, 아니면 3
x는 loc_list의 가장 최근 x좌표에서 R명령어를 통해 전환된 dx를 더한다.
y는 loc_list의 가장 최근 y좌표에서 L명령어를 통해 전환된 dy를 더한다.
loc_list에 현재의 (x,y)를 append해준다.
2. x와 y의 최대 최소값 구해서 미로 배열 만들기
loc_list를 x[0] (0,0)을 기준으로 정렬해 최소값과 최대값을 구한다.
3. 혹시 음수가 생길 수도 있으니 각 loc_list 원소에서 최소값을 빼준다
4. loc_list가 있는 위치에 "." 붙여주기
5. print("".join(row))
import sys
input = sys.stdin.readline
N = int(input())
action = input().strip()
loc_list = [(0, 0)]
dx, dy = [-1, 0, 1, 0], [0, 1, 0, -1]
status = 2
for a in action:
if a == 'R':
status = (status + 1) % 4
elif a == 'L':
status = (status - 1) if status != 0 else 3
else:
x = loc_list[-1][0] + dx[status]
y = loc_list[-1][1] + dy[status]
loc_list.append((x, y))
x_sort = sorted(loc_list, key=lambda x: x[0])
y_sort = sorted(loc_list, key=lambda x: x[1])
x_min, x_max = x_sort[0][0], x_sort[-1][0]
y_min, y_max = y_sort[0][1], y_sort[-1][1]
maze = [['#' for y in range(y_min, y_max + 1)] for x in range(x_min, x_max + 1)]
for i in range(len(loc_list)):
loc_list[i] = (loc_list[i][0] - x_min, loc_list[i][1] - y_min)
for i, j in loc_list:
maze[i][j] = '.'
for row in maze:
print(''.join(row))
레퍼런스
- 정답 참고
- 정답 깃허브
'Algorithm > 구현' 카테고리의 다른 글
[Python3] 1235번 학생 번호 (0) | 2023.04.09 |
---|---|
[Python3] 1138번 한 줄로 서기 (0) | 2023.04.09 |
[Python3] 백준 1002번 터렛 (0) | 2023.04.07 |
[Python3] 백준 1449번 수리공 항승 (0) | 2023.04.05 |
[Python3] 백준 1270번 전쟁 - 땅따먹기 (0) | 2023.04.05 |
댓글