url : https://programmers.co.kr/learn/courses/30/lessons/49994
문제 이미지가 많으므로 URL을 통해 문제를 읽어주세여:)
게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다.
- U: 위쪽으로 한 칸 가기
- D: 아래쪽으로 한 칸 가기
- R: 오른쪽으로 한 칸 가기
- L: 왼쪽으로 한 칸 가기
캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다.
명령어가 매개변수 dirs로 주어질 때, 게임 캐릭터가 처음 걸어본 길의 길이를 구하여 return 하는 solution 함수를 완성해 주세요.
- dirs는 string형으로 주어지며, 'U', 'D', 'R', 'L' 이외에 문자는 주어지지 않습니다.
- dirs의 길이는 500 이하의 자연수입니다.
- 프로그래머스에서 LEVEL 2로 되어있다.
- (현재 좌표, 이동좌표)의 데이터를 방문 한 지점으로 체크해주면 된다.
- 경로에는 방향성이 없으므로 (이동 좌표, 현재 좌표)도 함께 처리해주어야 한다.
- 경로를 벗어나는 경우만 무시하고 아무 연산을 해주지 않으면 된다.
def solution(dirs):
answer = 0
dic = {'U':[1,0],
'D':[-1,0],
'R':[0,1],
'L':[0,-1]}
start = [0,0]
vst = []
for s in dirs:
dx = dic[s][0]
dy = dic[s][1]
if start[0]+dx<-5 or start[0]+dx>5:
continue
if start[1]+dy>5 or start[1]+dy<-5:
continue
trace = (start[0],start[1],start[0]+dx,start[1]+dy)
retrace = (start[0]+dx,start[1]+dy,start[0],start[1])
if trace not in vst or retrace not in vst:
vst.append(trace)
vst.append(retrace)
start[0],start[1] = start[0]+dx,start[1]+dy
print(vst)
return len(vst)//2