



문제를 보고 중복으로 지나온 길은 하나로 치고, 지나온 길이의 전체길이를 구하는 것이니, set()을 이용해먹자고 생각하고 아래처럼 풀이를 진행했다.
움직임을 나타내기 위해 dx와 dy를 이용해 표현해 주었으며, 이를 이용해 커맨드에 따라 좌표가 움직이게 해주었다.
일단 좌표는 행렬로 만들필요가 없는 것이기에 -5 ~ 5 사이에서만 작동할 수 있게 조건을 걸어주었다. 그와 같이 그 사이에서 움직일 수 있는 좌표라면, 내가 간 길이를 set()으로 설정한 변수인 load에다가 ((출발),(도착)) 과 ((도착),(출발))을 추가했다. 이렇게 함으로서 길이를 나타내는 대에는 중복이 제거되므로 다시 더 손을 쓸 필요는 없기 때문이다.
커맨드가 끝나고 나면 이 set() 인 load 의 길이를 반으로 나눈 값을 반환하였다.
# 게임 캐릭터를 4가지 명령어로 움직임
# UDRL상하우좌
# 0,0에서 시작 경게는 좌상우하 대칭
# 처음 걸어본 길의 길이를 구하시오.
# [출발지점-도착지점], [도착지점-출발지점] 을 기록해두고 출력시에는 /2 하면 될듯?
direction = {'U':0,'D':1,'R':2,'L':3}
def solution(dirs):
answer = 0
load = set([])
# 현재 위치(0,0)
current = [0,0]
#상하우좌
dy = [1,-1,0,0]
dx = [0,0,1,-1]
# 움직이기
for i in range(len(dirs)):
if -5<= current[0] + dx[direction[dirs[i]]] <= 5 and -5 <= current[1] + dy[direction[dirs[i]]] <= 5:
nx = current[0] + dx[direction[dirs[i]]]
ny = current[1] + dy[direction[dirs[i]]]
load.add(((current[0], current[1]),(nx, ny)))
load.add(((nx,ny),(current[0], current[1])))
current = [nx, ny]
return len(load) //2
음... 내가 푼 방식과 유사하다.
합격!
ef 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