본문 바로가기

알고리즘

파이썬) 미로 만들기 -BOJ

 

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

 

n = int(input())

s = input()

arr = [[0, 0]]

# 동 남 서 북 0,1,2,3

x, y, d = 0, 0, 1

for i in s:
    if i == 'R':
        d = (d + 1) % 4
    elif i == 'L':
        d = (d - 1) % 4

    else:
        if d == 0:
            # 동
            x = x
            y += 1

        elif d == 1:
            x += 1
            y = y

        elif d == 2:
            x = x
            y -= 1

        else:
            x -= 1
            y = y

        arr.append([x, y])

min_x = 0
min_y = 0

max_x = 0
max_y = 0

for i in arr:
    x, y = i[0], i[1]
    min_x = min(x, min_x)
    min_y = min(y, min_y)

    max_x = max(x, max_x)
    max_y = max(y, max_y)


n = (max_x - min_x) + 1
m = (max_y - min_y) + 1

for i in arr:
    i[0] = i[0] + abs(min_x)
    i[1] += abs(min_y)

g = [['#' for _ in range(m)] for _ in range(n)]

for i in arr:
    nx, ny = i[0], i[1]
    g[nx][ny] = '.'

for i in g:
    for j in i:
        print(j, end='')
    print()

# graph = [['#' for _ in range(m)] for _ in range(n)]

 

풀이는 다음과 같다.

우선 입력을 기준으로 모든 x,y값을 저장한다.

x,y값을 반복문으로 돌며 x의 최소값과 y의 최소값을 각각 더해준다.

그 이유는 x,y가 음수가 될 수 있기 때문이다.

그 다음 가장 큰 x값과 가장 작은 x값을 뺀 다음 +1을 해주면 x축의 길이를 알 수있고

y축의 길이 또한 마찬가지로 구할 수 있다.

 

내가 헷갈린 점은 x축이 음수가 될 수 있어서 x값의 최소값을 더해주는데, 만일 x의 최소값이 1이나 2가 된다면?

그렇게 된다면 선언한 g라는 배열의 길이를 넘겠지만 애초에 처음 홍준이가 있는 위치가 0,0으로 설정했으니 최소값의 최대는 0이된다.

이 생각을 못해 결국 다른 이의 정답을 참조했다.

한 번 보면 바로 이해가 됐지만 0,0이 최소값이라는 생각을 전혀 못했다... 아쉽다. 조그만 더 가면 됐었는데...

 

'알고리즘' 카테고리의 다른 글

파이썬) 문자열 교환 - BOJ  (0) 2023.12.03
파이썬) 개미 - BOJ  (0) 2023.12.02
파이썬) 로봇 청소기 - BOJ  (0) 2023.11.29
파이썬) 시험 감독 -BOJ  (0) 2023.11.28
파이썬) 일곱 난쟁이 - BOJ  (0) 2023.11.23