현재 위치에서 다음 위치로 가는 길은 ((x1, y1), (x2, y2))로 표현할 수 있다.

길을 걷고 난 뒤에는 방금 걸은 길을 방문한 길의 set에 추가해준다.
다음 걸을 길이 만약 방문한 길의 set에 존재한다면 카운트하지 않는다.
다음 걸을 길이 만약 좌표평면 밖이라면 무시하고 다음 동작을 한다.

위의 방법대로 반복하면 쉽게 풀 수 있는 문제다.

FIELD_SIZE = 5


def solution(dirs):
    answer = 0

    visited = set()
    now = (0, 0)
    dx = { 'R': 1, 'L': -1, 'U': 0, 'D': 0 }
    dy = { 'R': 0, 'L': 0, 'U': 1, 'D': -1 }

    for dir in dirs:
        _now = now
        next = (now[0] + dx[dir], now[1] + dy[dir])

        if isOutOfField(next):
            continue

        now = next

        if isVisited(visited, _now, next):
            continue

        visited.add((_now, next))
        answer += 1

    return answer


def isVisited(visited, now, next):
    return True if (now, next) in visited or (next, now) in visited else False


def isOutOfField(next):
    return True if next[0] > FIELD_SIZE or next[0] < -FIELD_SIZE \
                   or next[1] > FIELD_SIZE or next[1] < -FIELD_SIZE else False

+ 따끈한 최근 게시물