본문 바로가기

알고리즘/구현

파이썬 | 프로그래머스 | 방문 길이

def dir(d, now):
    if d == "U":
        if now[1] == 5:
            return (now, now)	# 범위를 벗어나면 현재 위치를 두 개 갖는 튜플 반환
        return (now, (now[0], now[1] + 1))
    elif d == "D":
        if now[1] == -5:
            return (now, now)
        return (now, (now[0], now[1] - 1))
    elif d == "R":
        if now[0] == 5:
            return (now, now)
        return ((now[0] + 1, now[1]), now)
    else:
        if now[0] == -5:
            return (now, now)
        return ((now[0] - 1, now[1]), now)


def solution(dirs):
    route = {}
    move = (0, 0)  # 시작 위치
    first = 0  # 처음 가 본 길
    
    for d in dirs:
        tmp = dir(d, move)
        rev = (tmp[1], tmp[0])	# 역방향으로 이동한 적이 있는지 확인
        if (route.get(tmp) is None and route.get(rev) is None) and tmp[0] != tmp[1]:
            route[tmp] = 1
            first += 1
        if d == "U" or d == "D":
            move = tmp[1]
        else:
            move = tmp[0]
        
    return first

 

문제 출처 programmers.co.kr/learn/courses/30/lessons/49994

 

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

 

programmers.co.kr