상화좌우 좌표를 구현하고 그에 따른 이동과 예외처리 등 알고리즘은 쉽지만 비교적 구현이 까다로우므로 구현 유형의 문제라고 할 수 있다.
또한 일련의 명령에 따라서 개체를 차례대로 이동시킨다는 점에서 '시뮬레이션 유형' 으로도 분류 가능하다.
N = int(input())
V = list(input().split())
# 동 북 서 남
dx = [0, -1, 0, 1] #세로축 행
dy = [1, 0, -1, 0] #가로축 열
start = [1,1]
for x in range(len(V)):
if V[x] == 'R':
start[1] += dy[0]
if start[1] > N:
start[1] -= 1
elif V[x] == 'L':
start[1] += dy[2]
if start[1] < 1:
start[1] += 1
elif V[x] == 'U':
start[0] += dx[1]
if start[0] < 1:
start[0] += 1
elif V[x] == 'D':
start[0] += dx[3]
if start[0] > N:
start[0] -=1
print(start)
방향 벡터를 리스트로 정의하였다.
알파벳에 따라 그에 맞게 좌표를 이동하였고 주어진 좌표를 넘어서면 원상태로 돌려주었다.
N = int(input())
V = list(input().split())
# 동 북 서 남
dx = [0, -1, 0, 1] #세로축 행
dy = [1, 0, -1, 0] #가로축 열
move_type = ['R','U','L','D']
x,y=1,1
for i in V:
for j in range(len(move_type)):
if i == move_type[j]:
nx=x+dx[j]
ny=y+dy[j]
if nx<1 or ny<1 or nx>N or ny>N:
continue
x=nx
y=ny
print(f'{x} {y}')
풀이에서 힌트를 얻어 훨씬 간결하고 깔끔한 코드를 작성했다.
포인트는 nx, ny 와 같이 먼저 시뮬레이션을 하고 예외 시 예외처리를 해준다.
또한 방향 벡터와 move_type의 순서를 맞춰 보다 간결하게 코딩할 수 있었다.
14분 45초
구현 문제(시뮬레이션)에 대한 정확한 정의를 갖지 못했는데 이 문제를 통하여 정확하게 알게 되었다.
방향 벡터의 사용을 배웠다.