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

IT공부중·2020년 4월 10일
0

알고리즘

목록 보기
15/49

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

def solution(dirs):
    move = {
        "U" : (0,1),
        "L" : (-1, 0),
        "R" : (1, 0),
        "D" : (0,-1)
    }
    # field = [[0 for _ in range(11)] for _ in range(11)]
    nowX, nowY = [5,5]
    answer = 0
    check = set()
    for value in list(dirs):
        moveX, moveY = move[value]
        if 0 <= nowX + moveX <= 10 and 0 <= nowY + moveY <= 10: # 좌표평면을 벗어나지 않으면.
            nX, nY = nowX + moveX, nowY + moveY
            if (nowX, nowY, nX, nY) not in check:
                check.add((nowX, nowY, nX, nY))
                check.add((nX, nY, nowX, nowY))
                answer += 1
            nowX = nX
            nowY = nY 

    return answer

처음에 U,L,R, D 마다 어떻게 움직일지를 정해주었다.
-5부터 5까지랬는데 그거보단 0부터 10이 쉬울거 같아서 바꾸어서 진행했다. 이 때의 가운데 시작점은 5,5이다.
check라는 중복 체크할 set을 만들었다.
움직임만큼 반복해서 움직이는 좌표가 좌표평면을 넘어가지 않으면 check에 앞으로 갔을 때와 뒤로 갔을 때 둘다 추가해주었다. 둘 다 같은 길이기 때문이다. 그리고 answer += 1을 해준다. 좌표평면은 벗어나지 않지만 check에 있을 경우데도 nowX, nowY 값은 갱신해줘야 하기 때문에 밑에서 갱신해주었다.

profile
4년차 프론트엔드 개발자 문건우입니다.

0개의 댓글