본문 바로가기

알고리즘

프로그래머스 - 방문 길이(Python)

반응형

문제 설명

알고리즘 고민

좌표계에서 원하는 위치까지 이동한 후 새로운 곳을 이동한 횟수를 세는 문제이다. 일단 방향에 대한 정보를 딕셔너리 형태로 만들어 사용하고자 하였다. 그 후에 처음에는 robust하게 다음 위치와 현재 위치의 입력이 있는지 확인하고자 하였는데 이렇게 해서는 코드가 너무 복잡해진다고 생각이 들었다. 그래서 만약 중복된 길인 경우는 반대 방향에서 오는 것과 해당 방향으로 이동하는 두 가지 경우가 있는데 이 경우를 만약에 set에 없다면 두가지를 모두 추가하여 중복을 제거하고자 하였다. 마지막에 출력할 때는 set의 길이를 절반으로 만들어 주면 쉽게 해결할 수 있다.

코드

def solution(dirs):
    answer = 0
    direction = {'U' : (1,0), 'R' : (0,1), 'L' : (0,-1), 'D' : (-1,0)}
    visited = set()
    x, y = 0, 0
    for i in dirs:
        dy, dx = direction[i]
        sum_y = y + dy
        sum_x = x + dx
        if -5 <= sum_y <= 5 and -5<= sum_x <= 5:
            visited.add(((y,x),(sum_y, sum_x)))
            visited.add(((sum_y, sum_x),(y, x)))
            y = sum_y
            x = sum_x
        
    return len(visited) //2
반응형