[이코테] 구현 - 상하좌우

subin·2022년 3월 26일
0
post-thumbnail

🔔 문제

여행가 A는 NxN 크기의 정사각형 공간 위에 서 있다. 이 공간은 1X1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1,1)이며, 가장 오른쪽 아래 좌표는 (N,N)에 해당한다. 여행가 A는 상,하,좌,우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1,1)이다. 우리 앞에는 여행가 A가 이동할 계획이 적힌 계획서가 놓여 있다.
계획서에는 하나의 줄에 띄어쓰기를 기준으로 하여 L,R,U,D 중 하나의 문자가 반복적으로 적혀있다. 각 문자의 의미는 다음과 같다.

  • L: 왼쪽으로 한 칸 이동
  • R: 오른쪽으로 한 칸 이동
  • U: 위로 한 칸 이동
  • D: 아래로 한 칸 이동

이때 여행가 A가 NxN 크기의 정사각형 공간을 벗어나는 움직임은 무시된다. 예를 들어 (1,1)의 위치에서 L 혹은 U를 만나면 무시된다. 계획서가 주어졌을 때 여행가 A가 최종적으로 도착할 지점의 좌표를 출력하는 프로그램을 작성하시오.

입력

  • 첫째 줄에 공간의 크기를 나타내는 N이 주어진다. (1<=N<=100)
  • 둘째 줄에 여행가 A가 이동할 계획서 내용이 주어진다. (1<=이동 횟수<=100)

출력

  • 첫째 줄에 여행가 A가 최종적으로 도착할 지점의 좌표 (X,Y)를 공백으로 구분하여 출력한다.

⏰ 시간 복잡도

O(N)

🎯 풀이방법

이 문제를 요구사항대로 구현하면 연산 횟수는 이동 횟수에 비례하게 된다. 예를 들어 이동 횟수가 N번인 경우 시간 복잡도는 O(N)이다. 이러한 문제는 일련의 명령에 따라서 개체를 차례대로 이동시킨다는 점에서 시뮬레이션 유형으로 분류된다. 여행가 A가 이동할 수 있는 방향인 L,R,U,D를 dx,dy로 설정해놓고, 계획서를 처음부터 살펴보며 해당 방향으로 이동했을때 공간을 벗어나는지 아닌지를 확인한다. 공간을 벗어나지 않는다면 여행가의 위치(X,Y)를 새로운 값으로 바꿔준다.

💻 Python 코드

n = int(input())
move_type = list(map(str, input().split()))

x, y = 1, 1 # 현재 위치
direction = ['L','R','U','D']
dx = [0, 0, -1, 1] # L, R, U, D에 따른 이동 방향
dy = [-1, 1, 0, 0]

for move in move_type: # 이동 계획을 하나씩 확인
    for i in range(len(direction)):
        if move == direction[i]:
            nx = x + dx[i]
            ny = y + dy[i]

    if nx >= 1 and nx <= n and ny >= 1 and ny <= n: # 공간을 벗어나지 않는다면
        x = nx
        y = ny

print(x, y)
profile
한번뿐인 인생! 하고싶은게 너무 많은 뉴비의 deep-dive 현장

0개의 댓글

관련 채용 정보