백준 1347 미로 만들기

wook2·2022년 6월 7일
0

알고리즘

목록 보기
97/117

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

특별한것 없는 구현문제.
방향만 잘 나타내주면 되는데, 위 오른쪽 아래 왼쪽을 각각 0 1 2 3으로 설정했다.

후에 키를 iter하면서 L이라면 -1 R이라면 +1을 해주었다.
만약 값이 0이라면 -1이 되는데 이러한 경우를 대비해 d = (d+4) % 4로 일반성을 유지해 주었다.

여기까지 했다면 이제 배열을 만들면 되는데, 처음 위치를 0,0으로 잡고 이동할때마다 위치를 모두 넣어주었다.
이러면 음수인 원소가 생기는데, 원소의 최솟값을 더해 모두 양수로 만들어 주었고
배열의 크기를 구하기 위해 모두 양수인 상태에서 가장 큰 숫자를 구했다.

이제 배열을 출력하면 끝!

n = int(input())
arr = list(input())
dx = [-1,0,1,0]
dy = [0,1,0,-1]
d = 2
x,y = 0,0
q = [[0,0]]
for a in arr:
    if a == 'F':
        x = x + dx[d]
        y = y + dy[d]
        q.append([x,y])
        continue
    if a == 'L':
        d -= 1
    elif a == 'R':
        d += 1
    d = (d+4) % 4
max_x = 0
min_x = 99
min_y = 99
max_y = 0
for i in q:
    min_x = min(min_x, i[0])
    min_y = min(min_y, i[1])
for i in range(len(q)):
    q[i][0] -= min_x
    q[i][1] -= min_y
    max_x = max(max_x, q[i][0])
    max_y = max(max_y, q[i][1])

arr = [['#']*(max_y+1) for i in range(max_x+1)]
for i in q:
    x,y = i
    arr[x][y] = '.'
for row in arr:
    print(*row, sep='')
profile
꾸준히 공부하자

0개의 댓글