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 값은 갱신해줘야 하기 때문에 밑에서 갱신해주었다.