[ 이코테 ] 상하좌우 - 파이썬(Python)

싱가·2023년 3월 27일
0

문제

  • N * N 크기의 정사각형 공간 존재
  • 가장 왼쪽 위 좌표는 (1, 1), 가장 오른쪽 아래 좌표는 (N, N)
  • 여행자 A는 상, 하, 좌, 우 방향으로 이동 가능
  • 시작 좌표는 항상 (1, 1)
  • L: 왼쪽 한 칸 이동, R: 오른쪽 한 칸 이동, U: 위쪽 한 칸 이동, D: 아래쪽 한 칸 이동
  • N * N 크기의 공간을 벗어나는 움직임은 무시

입력 예시

5
R R R U D D

출력 예시

3 4

예시 풀이

시작: (1, 1)
R: (1, 2)
R: (1, 3)
R: (1, 4)
U: 공간 밖 무시
D: (2, 4)
D: (3, 4)

아이디어

  1. N * N 사이즈 공간을 미리 만들어 놓고 해당 좌표 찾기
    • 이 부분은 생각보다 효율이 좋지 못할 것 같아 포기..
  2. 시작 좌표를 이용하여 이동 계획을 하나씩 확인하며 이동

코드

n = 5
m = ['R', 'R', 'R', 'U', 'D', 'D']

# 방향벡터 - 서, 동, 북, 남
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move = ['L', 'R', 'U', 'D']

x, y = 1, 1

for i in range(len(m)):
    for j in range(len(move)):
        if m[i] == move[j]:
            nx = x + dx[j]
            ny = y + dy[j]
    
    if 1 <= nx <= n and 1 <= ny <= n:
        x, y = nx, ny
    
print(x, y)
  • 방향벡터와 움직임을 나타내는 변수 지정
  • 이동 계획을 하나씩 확인하며 이동 후 좌표를 구함
  • nx와 ny가 1보다 크거나 같고 n보다 작거나 같을 경우에만 추출 할 수 있도록 지정 => 공간 벗어나는 경우 무시

0개의 댓글