6. 구현 : 상하좌우 움직이기

2021. 11. 13. 20:11파이썬/알고리즘

input:

자연수 N을 입력 받는다.

공백으로 띄워진 문자 L, R, U, D를 입력 받는다.

 

rule :

N * N의 크기 정사각형, 내부는 1 * 1 크기의 정사각형 이루어져 있음.

(1, 1) 부터 (N, N)

이 사각형 내부에서 벗어날 수 없으며 안 쪽에서만 움직일 수 있음.

L, R, U, D

왼쪽, 오른쪽, 위, 아래로 한 칸 씩 이동할 수 있음.

 

N = int(input())
str_list = input().split()

total = []
location = [1,1]


# for i in range(N) :
#  row_list = [(i+1,j+1) for j in range(N)]
#  total.append(row_listx = locationy = location[0]

for str_ in str_list:
    if str_ == 'L':
      location[1] -= 1
      
      if location[1] == 0:
        location[1] = 1
    elif str_ == 'R':
      location[1] += 1
      
      if location[1] > N:
        location[1] -= 1
    elif str_ == 'U':
      location[0] -= 1

      if location[0] == 0:
        location[0] = 1

    elif str_ == 'D':
      location[0] += 1

      if location[0] > N:
        location[0] -= 1
print(location[0],location[1])

위 코드는 내가 처음 짠 코드 ㅠㅠ 잘 작동 하긴 하는데 너무 중구난방인 것 같다.

게다가 주석 처리한 부분은 너무 어렵게 접근한 것 같다.. 이 쉬운 문제에 시간을 얼마나 쓴 거야..

 

n = int(input())
str_list = input().split()
x, y = 1,1

dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
move_types = ['L', 'R', 'U', 'D']

for plan in str_list:

  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)

 

동일한 크기의 배열과 서로 매칭되는 만들어주고 인덱스를 쉽게 활용할 수 있게 만든 것 같다.

실제로 변수를 수정하고 임시 변수에 저장한 뒤 조건에 맞을 경우

실제로 변수에 저장하는 부분이 독립된 것이 인상적이다. 

반응형