알고리즘 공부🔥/프로그래머스🤔

[🔥문제풀이🔥] 프로그래머스 방문 길이(python)

Dev_예겸😁 2021. 9. 3. 21:15

문제

링크

게임 캐릭터를 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