https://programmers.co.kr/learn/courses/30/lessons/49994
생각의 흐름대로 풀어, 코드가 좀 지저분한 것 같지만 논리는 다음과 같다.
0,0에서 시작해서 각 방향에 따라 해당하는 좌표가 그래프를 넘어가는지 확인하고 안넘어간다면 0,0->0,1 or 0,1->0,0으로 간 적이 있다면 continue한다.
처음 가는 길이라면 visited에 추가해주고 visited의 길이를 리턴해주면 정답이다.
def solution(dirs):
visited=[]
start=(0,0)
for direct in dirs:
i,j=start
if direct=="U":
if i>=-5 and i<=5 and j+1>=-5 and j+1<=5:
end=(i,j+1)
if (start,end) in visited or (end,start) in visited:
start=end
continue
visited.append((start,end))
start=end
#print(visited)
elif direct=="L":
if i-1>=-5 and i-1<=5 and j>=-5 and j<=5:
end=(i-1,j)
if (start,end) in visited or (end,start) in visited:
start=end
continue
visited.append((start,end))
start=end
#print(visited)
elif direct=="R":
if i+1>=-5 and i+1<=5 and j>=-5 and j<=5:
end=(i+1,j)
if (start,end) in visited or (end,start) in visited:
start=end
continue
visited.append((start,end))
start=end
#print(visited)
elif direct=="D":
if i>=-5 and i<=5 and j-1>=-5 and j-1<=5:
end=(i,j-1)
if (start,end) in visited or (end,start) in visited:
start=end
continue
visited.append((start,end))
start=end
#print(visited)
return len(visited)
더 간단한 코드
def solution(dirs):
s = set()
d = {'U': (0,1), 'D': (0, -1), 'R': (1, 0), 'L': (-1, 0)}
x, y = 0, 0
for i in dirs:
nx, ny = x + d[i][0], y + d[i][1]
if -5 <= nx <= 5 and -5 <= ny <= 5:
s.add((x,y,nx,ny))
s.add((nx,ny,x,y))
x, y = nx, ny
return len(s)//2