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 |