[공부] 2차원 배열 - 상하좌우 이동 문제

zero_0·2021년 9월 21일
0

알고리즘

목록 보기
6/10
post-thumbnail

상하좌우 문제

  • 여행가 A는 NxN 크기의 정사각형 공간위에 있다.
    가장 위는 (1,1) 가장 아래는 (n,n)임
    상하좌우 방향으로 이동가능하며 시작은 (1,1)
    L,R,U,D = 왼,오,위,아
    입력 : 공간 크기 n과 이동계획서 입력받기
    출력 : 최종적으로 A가 도착할 지점 좌표 공백 기준으로 출력
n = int(input())
x, y = 1, 1
plans = input().split()

# U,R,D,L에 따른 이동 방향
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
move_types = ['U','R','D','L']

# 이동 계획을 하나씩 확인하기
for plan in plans:
    # 이동 후 좌표 구하기
    for i in range(len(move_types)): # move_types 요소 하나하나 보기
        if plan == move_types[i]: # 계획이 move_type[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)

풀이 과정

<풀이 과정>

  1. dx, dy, move_types 이동방향을 리스트에 넣어주고
  2. for문 돌면서 입력받은 이동계획을 하나씩 확인한다.
  3. 이중 for문으로 move_types의 요소 하나하나를 돌면서
  4. if연산으로 이동계획과 move_types[i] 위치값 인덱싱을 비교한다.
  5. 만약 그 둘이 같다면 nx 값을 기존 값 + dx[i] 위치값을 더해줌
    ny 값도 더해줌
  6. 그리고 nx와 ny값이 공간에서 벗어나면 무시하도록 한다.
    if , continue 로 설정함
  7. x와 y에 nx, ny를 넣어줌
  8. for문 밖에 최종 x, y 값을 print한다.

결과

느낀점

엘리스 알고리즘 시험을 대비해서 동빈나님이 올려주신 알고리즘 영상을 보며
익힐 예정이다. 느낀점은 앞으로 갈 길이 멀구나.. 혼자 풀 수 있을 정도로 반복해야겠다 생각했다.

profile
차근차근 채워가는 it일지

0개의 댓글