🧑🏻💻 문제링크
주어진 방향대로 좌표에서 움직인 길이를 구하는 구현문제이다. 이 문제는 약간 백준 문제의 로봇 청소기 문제와 비슷한 것 같다. 중복된 선을 구분하기 위해서는 set()
함수를 사용하였다. 가끔씩 set()
함수가 기억이 안나면
set 함수 정리 사이트 를 참고하면 될 것 같다.
visited.add((x, y, nx, ny))
visited.add((nx, ny, x, y))
코드를 보면 이렇게 중복된 선을 확인 해주었는데 예를 들면 좌표가 (0, 0)에서 (1, 0)을 이동했을 때와 (1, 0)에서 (0, 0)으로 이동했을 때 같은 선이기 때문에 위와 같이 구현을 하였다.
def direction(d):
# 위쪽으로 한 칸
if d == "U":
return 0
# 아래쪽으로 한 칸
elif d == "D":
return 2
# 오른쪽으로 한 칸
elif d == "R":
return 1
# 왼쪽으로 한 칸
elif d == "L":
return 3
def solution(dirs):
answer = 0
# 위, 오른쪽, 아래, 왼쪽
dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]
visited = set()
x, y = 0, 0
for d in dirs:
i = direction(d)
nx, ny = x + dx[i], y + dy[i]
# 범위를 벗어날 경우 무시
if nx < -5 or nx > 5 or ny < -5 or ny > 5:
continue
# 하나의 선분을 이동할 때 양방향을 같이 확인
if (x, y, nx, ny) not in visited:
visited.add((x, y, nx, ny))
visited.add((nx, ny, x, y))
answer += 1
x, y = nx, ny
return answer