여행가 A는 NXN크기의 정사각형 공간 위에 서 있다. 이 공간은 1X1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1,1)이며, 가장 오른쪽 아래 좌표는 (N,N)에 해당한다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1,1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있다.
계ㅅ획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L,R,U,D 중 하나의 문자가 반복적으로 적혀있다. 각 문자의 의미는 다음과 같다.
이 때 여행가 A가 NXN 크기의 정사각형 공간을 벗어나는 움직임은 무시된다. 예를들어 (1,1)의 위치에서 L혹은 U를 만나면 무시된다.
계획서가 R->R->R->U->D->D라고 하고 N=5라고 하면 여행가는 (1,2),(1,3),(1,4),(2,4),(3,4) 순으로 움직여 최종적으로 여행가 A는 (3,4)에 도착할 것이다.
계획서가 주어졌을 때 여행가 A가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.
입력조건
출력 조건
입력 예시
5
R R R U D D
출력예시
3 4
n=int(input())
move=list(input().split())
result=[1,1]
for i in move:
if i == 'R':
if result[1]+1>n:
continue
else : result[1]+=1
elif i == 'L':
if result[1]-1<1:
continue
else : result[1]-=1
elif i == 'D':
if result[0]+1>n:
continue
else : result[0]+=1
elif i == 'U':
if result[0]-1<1:
continue
else : result[0]-=1
print(result[0],result[1])
n=int(input())
x,y=1,1
plans=input().split()
#L,R,U,D에 따른 이동 방향
dx = [0,0,-1,1]
dy = [-1,1,0,0]
move_types = ['L','R','U','D']
# 이동 계획 하나씩 확인
for plan in plans:
#이동 후 좌표 구하기
for i in range(len(move_types)):
if plan == move_types[i]:
nx=x+dx[i]
ny=y+dy[i]
#공간을 벗어나는 경우 무시
if nx < 1 or ny < 1 or nx > n or ny > n:
continue
#이동 수행
x,y=nx,ny
print(x,y)
지금은 내 풀이가 더 간단하게 생각하기 좋아보이는 듯한데 로직이 더 복잡해지면 답안의 방식대로 푸는것이 간편할 것 이다. 실제로 뒤의 왕실의 나이트 문제를 풀 때 응용했다.
dx와 dy를 위와 같은 방식으로 설정하는 발상이 조금 어려울 것 같다.