본문 바로가기
Algorithm/프로그래머스

[프로그래머스] Lv2 - 방문 길이 (파이썬)

by _temp 2022. 5. 13.

https://programmers.co.kr/learn/courses/30/lessons/49994

 

코딩테스트 연습 - 방문 길이

 

programmers.co.kr

 

def solution(dirs):
    visited = set()
    direction = {'R': [0, 1], 'U': [1, 0], 'L': [0, -1], 'D': [-1, 0]}

    x, y = 0, 0
    answer = 0
    for order in dirs:
        dx, dy = direction[order]
        if -5 <= x+dx <= 5 and -5 <= y+dy <= 5:
            road1 = ''.join(list(map(str, [x, y, x+dx, y+dy])))
            road2 = ''.join(list(map(str, [x+dx, y+dy, x, y])))
            if road1 not in visited:
                answer += 1
            visited.add(road1)
            visited.add(road2)
            x += dx
            y += dy
    return answer

 

풀이
1. 방문 여부를 집합으로 관리해주었다.
2. direction은 각 방향마다 좌표 이동을 딕셔너리로 정의
3. 각 명령마다
    - -5~5의 범위 안의 모든 값마다
    - x, y, x+dx, y+dy를 합한 문자열을 visited에 없으면 answer += 1
    - 이후 해당 문자열을 visited에 add (x+dx, y+dy, x, y도 포함, 선분이므로 두 가지 경우)
    - x, y 값 이동
4. answer 반환