[알고리즘 문제 풀이] 상하좌우

이동욱

2021/08/31

Categories: 알고리즘

문제 - 상하좌우


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

제한 사항


입력

출력

아이디어


코드


from typing import List
from typing import Tuple


def solution(n: int, maps: List[str]) -> Tuple[int, int]:
    current_x = 1
    current_y = 1

    for map in maps:
        if map == 'L':
            if 1 <= current_x - 1 <= n:
                current_x -= 1
        elif map == 'R':
            if 1 <= current_x + 1 <= n:
                current_x += 1
        elif map == 'U':
            if 1 <= current_y - 1 <= n:
                current_y -= 1
        elif map == 'D':
            if 1 <= current_y + 1 <= n:
                current_y += 1

    return current_y, current_x


def solution2(n: int, plans: List[str]) -> Tuple[int, int]:
    x, y = 1, 1
    dx = [0, 0, -1, 1]
    dy = [-1, 1, 0, 0]
    move_types = ['L', 'R', '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
    return x, y


if __name__ == '__main__':
    n = int(input())
    maps = list(input().split())
    print(solution(n, maps))

개선할 점


참고 문헌


>> Home