본문 바로가기
Algorithm Problem Solving/이코테 (나동빈 저)

[구현/시뮬레이션] 이코테 상하좌우 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2022. 6. 3.
728x90
반응형

이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 4장 구현(Implementation), 시뮬레이션(simulation) 유형의 상하좌우 문제는 여행가의 이동 계획서와 정사각형 공간의 크기가 주어졌을 때 여행가 A가 최종적으로 도착할 지점의 좌표를 구하는 문제이다.

 

이코테 4장 구현 상하좌우 문제 정보

출처

- [한빛미디어] 이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저)

- https://youtu.be/2zjoKjt97vQ

알고리즘 분류

- 구현, 시뮬레이션 (Implementation, simulation algorithm)

 

상하좌우 문제 요약

  • 여행가 A가 NxN 크기의 정사각형 공간 위에 서 있고 공간은 1x1 크기의 정사각형으로 나누어져 있다.
  • 가장 왼쪽 위 좌표는 (1, 1), 가장 오른쪽 아래 좌표는 (N, N)이다.
  • 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있고, 시작 좌표는 항상 (1, 1)이다.
  • 여행가 A가 이동할 계획서에는 하나의 줄에 띄어쓰기를 기준으로 L, R, U, D 중 하나의 문자가 반복적으로 적혀있다.
  • 각 문자의 의미는 다음과 같다.
    • L: 왼쪽으로 한 칸 이동
    • R: 오른쪽으로 한 칸 이동
    • U: 위로 한 칸 이동
    • D: 아래로 한 칸 이동
  • 이때 여행가 A가 NxN 크기의 정사각형 공간을 벗어나는 움직임은 무시된다.
  • 첫째 줄에는 공간의 크기 N(1 N 100)이 주어진다.
  • 둘째 줄에는 여행가 A가 이동할 계획서 내용이 주어진다. (1 이동 횟수 100)
  • 여행가 A가 최종적으로 도착할 지점의 좌표(X, Y)를 공백 기준으로 구분하여 출력한다.

 

문제 풀이 과정

  1. 공간의 크기 N과 이동할 계획서 내용을 입력받는다.
  2. 키 값이 방향(U, D, L, R)이고, 값이 이동하는 좌표인 딕셔너리를 정의한다.
  3. 현재 위치 좌표로 구성된 리스트를 정의한다.
  4. 이동 계획서를 한 문자씩 탐색하여 다음 위치 좌표를 저장해둔다.
  5. 다음 위치 좌표가 공간을 벗어나지 않는다면 현재 위치를 다음 위치로 바꾸고(이동), 벗어난다면 무시한다.
  6. 이동 계획서의 문자를 모두 탐색하며 4~5번 과정을 반복한다.
  7. 현재 위치 좌표를 공백 기준으로 구분하여 출력한다.

 

코드 및 설명
  • N - 공간의 크기
  • direction - 키가 방향, 값이 이동하는 좌표로 구성된 딕셔너리
  • position - 현재 위치 좌표로 구성된 리스트
  • plan - 여행가 A가 이동할 계획서 내용(L, R, U, D 중 하나의 문자)으로 구성된 리스트
  • p - 현재 이동할 문자
  • nextX - 이동할 다음 위치의 x 좌표
  • nextY - 이동할 다음 위치의 y 좌표
N = int(input())
plan = list(map(str, input().split()))

direction = {
    'R': (0, 1),
    'L': (0, -1),
    'U': (-1, 0),
    'D': (1, 0)
}

position = [1, 1]

for p in plan:
    nextX = position[0] + direction[p][0]
    nextY = position[1] + direction[p][1]
    if 0 < nextX <= N and 0 < nextY <= N:  # 공간을 벗어나지 않을 때
        position = [nextX, nextY]  # 이동하기

print(position[0], position[1])

현재 위치 좌표를 굳이 리스트로 두지 않고, int형 변수로 두면 메모리를 더 줄일 수 있을 것 같다.

시뮬레이션, 완전 탐색 문제에서는 방향벡터가 자주 활용되므로 익숙해지도록 해야겠다.

 

이것이 취업을 위한 코딩 테스트다 with 파이썬 (나동빈 저) 4장 구현(Implementation), 시뮬레이션(simulation) 유형의 상하좌우 문제를 파이썬 python으로 풀어보았다.

728x90
반응형

댓글