문제
게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다.
U: 위쪽으로 한 칸 가기
D: 아래쪽으로 한 칸 가기
R: 오른쪽으로 한 칸 가기
L: 왼쪽으로 한 칸 가기
캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다.
명령어가 매개변수 dirs로 주어질 때, 게임 캐릭터가 처음 걸어본 길의 길이를 구하여 return 하는 solution 함수를 완성해 주세요.
풀이
python의 set 자료형을 사용하여 문제를 해결합니다.
이 때, 단일 방향의 정보만 저장하는 것이 아닌 양 방향 정보를 저장해서 중복된 이동을 오류없이 잡아내야 합니다.
set은 중복이 허용되지 않고 in 연산자, add method를 사용할 수 있기 때문에 게임 캐릭터의 이동정보를 중복없이 저장할 수 있습니다.
예를 들어 현재 캐릭터의 위치가 (0,0) 일 때, U 명령을 따라 (1,0) 으로 이동해야 한다면 set에 (0,0,0,1) 을 추가하고 반대 방향인 (0,1,0,0) 도 저장해줍니다.
코드
def solution(dirs):
answer = 0
store = set()
c_x,c_y,dx,dy = 0,0,0,0
for char in dirs:
if char == 'U':
dx,dy = 0, 1
elif char == 'D':
dx,dy = 0, -1
elif char == 'R':
dx,dy = 1, 0
else:
dx,dy = -1, 0
if (c_x == 5 and char == 'R') or (c_x == -5 and char == 'L') or (c_y == 5 and char == 'U') or (c_y == -5 and char == 'D'):
continue
if (c_x,c_y,c_x+dx,c_y+dy) in store or (c_x+dx,c_y+dy,c_x,c_y) in store:
pass
else:
store.add((c_x,c_y,c_x+dx,c_y+dy))
store.add((c_x+dx,c_y+dy,c_x,c_y))
answer+=1
c_x += dx
c_y += dy
return answer