[프로그래머스] 방문 길이 - python 본문

코테 문제 풀이

[프로그래머스] 방문 길이 - python

미니모아 2022. 3. 23. 23:53
반응형

방문 길이

문제 설명

게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다.

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

명령어가 매개변수 dirs로 주어질 때, 게임 캐릭터가 처음 걸어본 길의 길이를 구하여 return 하는 solution 함수를 완성해 주세요

제한 사항

  • dirs는 string형으로 주어지며, 'U', 'D', 'R', 'L' 이외에 문자는 주어지지 않습니다.
  • dirs의 길이는 500 이하의 자연수입니다.

풀이

방문 길이를 구할 때 출발점과 도착점이 반대로 되어 있어도 같은 경로로 계산해야한다.

예를 들어 (0, 0) -> (1, 0) 다음에 (1, 0) -> (0, 0)로 움직였다면 이미 한번 간 길을 다시 간 것이기 때문에 방문 길이는 1이다.

각 좌표를 정렬하여 저장하면 항상 최소 값이 왼쪽으로 오도록 저장되기 때문에 중복을 신경쓰지 않아도 된다.

단 출발점의 x,y 와 다음 지점의 x,y는 구별되어야하기 때문에 각각 튜플로 묶어준다.

def solution(dirs):
    answer = 0
    command_dict = {
        "U": (-1, 0),
        "D": (1, 0),
        "R": (0, 1),
        "L": (0, -1),
    }
    check = set()
    position = (0, 0)
    
    for d in dirs:
        direction = command_dict[d]
        next_position = tuple(map(sum, zip(position, direction)))
        nx, ny = next_position
        if -5 <= nx <= 5 and -5 <= ny <= 5:
            check.add(tuple(sorted([position, next_position])))
            position = next_position
    return len(check)
반응형
Comments