[python] 상하좌우

yeco_ob·2023년 1월 31일
0

문제

여행가 A는 N x N 크기의 정사각형 공간 위에 서 있습니다. 이 공간은 1 x 1 크기의 정사각형으로 나누어져 있습니다. 가장 왼쪽 위 좌표는 (1,1) 이며, 가장 오른쪽 아래 좌표는 (N,N)에 해당합니다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며 시작 좌표는 항상 (1,1)입니다. 우리 앞에는 여행가 A가 이동할 계획서가 놓여 있습니다.

계획서에는 L, R, U, D 중 띄어쓰기를 기준으로 문자가 반복으로 적혀 있습니다. 각각 순서대로 왼쪽, 오른쪽, 위, 아래로 한 칸 이동을 의미합니다. 정사각형 공간을 벗어나는 움직임은 무시됩니다.

첫째 줄에 공간의 크기를 나타내는 N이 주어지고 둘째 줄에 여행가 A가 이동할 계획서 내용이 주어집니다. 이때 A가 최종적으로 도달할 지점의 좌표 (X,Y)를 공백 기준으로 구분하여 출력하세요.

이 문제는 명령에 따라 개체를 이동시킨다는 점에서 시뮬레이션 유형으로도 분류된다.

의사 코드

  1. N, 이동 계획 입력 받기
  2. L, R, U, D에 따른 이동 방향 설정
  3. 이동 계획에 따라 이동시키기
  4. 공간을 벗어나는 경우 무시하기
  5. 출력

제출

N = int(input()) #N 입력 받기
move_list =input().split() #이동 계획 입력 받기
x, y = 1, 1
#LRUD에 따른 이동 방향 설정
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ['L', 'R', 'U', 'D']

for i in move_list:
  for j in range(len(move_types)):
    if i == move_types[j]:
      nx = x + dx[j]
      ny = y + dy[j]
  #N 크기를 넘기는 경우 무시 
  if nx < 1 or ny < 1 or nx > N or ny > N:
    continue

print(x, y)

💡 방향 벡터

시뮬레이션 및 완전 탐색 문제에서는 2차원 공간에서 방향 벡터가 사용된다. 위 문제에서 이를 사용하기 위해 nx, dy 변수로 좌표를 이동시킨다.

1번 for문에서 move_list의 이동 경로를 하나씩 탐색하고,
2번 for문에서는 move_types의 이동 방향을 하나씩 탐색한다.

이때 두 값이 같다면 좌표를 이동시키는 것이다.

0개의 댓글