- 문제

여행가 A는 N×NN \times N 크기의 정사각형 공간 위에 서 있다. 이 공간은 1×11 \times 1 크기의 정사각형으로 나누어져 있다. 가장 왼쪽 위 좌표는 (1, 1)이며, 가장 오른쪽 아래 좌표는 (N, N)이다. 여행가 A는 상, 하, 좌, 우 방향으로 이동할 수 있으며, 시작 좌표는 항상 (1, 1)이다. 여행가 A가 이동할 계획이 적힌 계획서가 있고, L, R, U, D 중 하나의 문자가 반복적으로 적혀있다.

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

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

다음 사진은, 입력 예시에 따른 여행가의 이동 위치를 표시한 그림이다.

- 입력 조건

첫째 줄에 공간의 크기를 나타내는 N이 주어짐.
둘째 줄에 여행가 A가 이동할 계획서 내용이 주어짐.

- 출력 조건

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

- 입력 예시

5
R R R U D D

- 출력 예시

3 4

- 문제 풀이

해당 문제는 구현 알고리즘을 이용한다면 쉽게 해결할 수 있다. 구현 알고리즘이란, 간단하게 말해서, 머릿속에 있는 알고리즘을 코드로 바꾸는 과정이다. 일반적으로 틀이 정해져있는 알고리즘이라기보단, 문제를 해결하기 위해서 사용해야 하는 알고리즘을 어떻게 코드로 구현해야 하는가에 대한 알고리즘이라고 보는게 맞다고 생각한다. 실제로 구현 중심의 문제들이 코딩테스트에 자주 출제된다. 구현 문제가 자주 출제되는 이유는, 구현 문제의 경우 풀이를 쉽게 생각해낼 수 있지만, 코드로 옮기는 것이 어렵기 때문이다.

주어진 문제는 현재 위치에서 어느 방향으로 이동할지 판단한 후, 현재 좌표에 값을 더해주면 된다.

프로세스를 순차적으로 나열해보면,
1. 정사각형의 크기와 이동 계획을 입력으로 받기
2. 반복문을 이용하여, 이동 계획에 따라 좌표값을 변경
3. 만약, 이동 계획이 주어진 공간을 벗어난다면 무시하기
4. 최종 도착지의 좌표를 출력

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

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

for plan in plans:
    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)

출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, 나동빈 지음

profile
코딩하는 물리학도

0개의 댓글