여행가 A는 NxN 크기의 정사각형 공간 위에 서 있다. 이 공간은 1X1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1,1)이며, 가장 오른쪽 아래 좌표는 (N,N)에 해당한다. 여행가 A는 상,하,좌,우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1,1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있다.
계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L,R,U,D 중 하나의 문자가 반복적으로 적혀있다. 각 문자의 의미는 다음과 같다.
이때 여행가 A가 NxN 크기의 정사각형 공간을 벗어나는 움직임은 무시된다. 예를 들어 (1,1)의 위치에서 L 혹은 U를 만나면 무시된다. 계획서가 주어졌을 때 여행가 A가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.
O(N)
이 문제를 요구사항대로 구현하면 연산 횟수는 이동 횟수에 비례하게 된다. 예를 들어 이동 횟수가 N번인 경우 시간 복잡도는 O(N)이다. 이러한 문제는 일련의 명령에 따라서 개체를 차례대로 이동시킨다는 점에서 시뮬레이션 유형으로 분류된다. 여행가 A가 이동할 수 있는 방향인 L,R,U,D를 dx,dy로 설정해놓고, 계획서를 처음부터 살펴보며 해당 방향으로 이동했을때 공간을 벗어나는지 아닌지를 확인한다. 공간을 벗어나지 않는다면 여행가의 위치(X,Y)를 새로운 값으로 바꿔준다.
n = int(input())
move_type = list(map(str, input().split()))
x, y = 1, 1 # 현재 위치
direction = ['L','R','U','D']
dx = [0, 0, -1, 1] # L, R, U, D에 따른 이동 방향
dy = [-1, 1, 0, 0]
for move in move_type: # 이동 계획을 하나씩 확인
for i in range(len(direction)):
if move == direction[i]:
nx = x + dx[i]
ny = y + dy[i]
if nx >= 1 and nx <= n and ny >= 1 and ny <= n: # 공간을 벗어나지 않는다면
x = nx
y = ny
print(x, y)