[프로그래머스 / Python] 방문 길이

KYUNG HWAN·2021년 8월 31일
0

Algorithm

목록 보기
15/18
post-thumbnail
post-custom-banner

🧑🏻‍💻 문제링크

문제풀이

주어진 방향대로 좌표에서 움직인 길이를 구하는 구현문제이다. 이 문제는 약간 백준 문제의 로봇 청소기 문제와 비슷한 것 같다. 중복된 선을 구분하기 위해서는 set() 함수를 사용하였다. 가끔씩 set() 함수가 기억이 안나면

set 함수 정리 사이트 를 참고하면 될 것 같다.

visited.add((x, y, nx, ny))
visited.add((nx, ny, x, y))

코드를 보면 이렇게 중복된 선을 확인 해주었는데 예를 들면 좌표가 (0, 0)에서 (1, 0)을 이동했을 때와 (1, 0)에서 (0, 0)으로 이동했을 때 같은 선이기 때문에 위와 같이 구현을 하였다.

코드

def direction(d):
    # 위쪽으로 한 칸
    if d == "U":
        return 0
    # 아래쪽으로 한 칸
    elif d == "D":
        return 2
    # 오른쪽으로 한 칸
    elif d == "R":
        return 1
    # 왼쪽으로 한 칸
    elif d == "L":
        return 3
      

def solution(dirs):
    answer = 0

    # 위, 오른쪽, 아래, 왼쪽
    dx = [-1, 0, 1, 0]
    dy = [0, 1, 0, -1]

    visited = set()
    x, y = 0, 0

    for d in dirs:
        i = direction(d)
        nx, ny = x + dx[i], y + dy[i]
        # 범위를 벗어날 경우 무시
        if nx < -5 or nx > 5 or ny < -5 or ny > 5:
            continue

        # 하나의 선분을 이동할 때 양방향을 같이 확인
        if (x, y, nx, ny) not in visited:
            visited.add((x, y, nx, ny))
            visited.add((nx, ny, x, y))
            answer += 1
            
        x, y = nx, ny

    return answer

결과

profile
내가 그린 기린 그림
post-custom-banner

0개의 댓글