문제

여기서 직접 풀어보실 수 있습니다!

https://programmers.co.kr/learn/courses/30/lessons/49994

게임 캐릭터를 4가지 명령어를 통해 움직이면서
처음으로 방문한 루트만 세주면 되는 문제입니다.

풀이

분기를 어레이와 딕셔너리를 이용해서 이렇게 깔끔하게 짤 수 있었습니다.
set()을 쓴 것도 포인트입니다.

def solution(dirs):
    answer = 0
    visited = set()
    dx = [1, -1, 0, 0]
    dy = [0, 0, 1, -1]
    cmd = {'R':0, 'L':1, 'U':2, 'D':3}
    
    x, y = 0, 0
    
    for d in dirs:
        # 이 코드가 포인트! 
        # cmd를 특정 idx와 매핑을 시켜 다른 동작을 하도록 만듭니다. 
        new_x, new_y = x + dx[cmd[d]], y + dy[cmd[d]]

        # 경계값을 체크해줍니다. 
        if new_x < -5 or new_x > 5 or new_y < -5 or new_y > 5:
            continue
            
        # 모든 루트의 가운데 점은 구별될 수 있으므로 
        # 루트를 포인트로 나타낼 수 있습니다. 
        point = ((new_x + x)/2, (new_y + y)/2)  
        if point not in visited:
            visited.add(point)
            answer += 1
        
        # 이동한 곳으로 점의 위치를 바꿔줍니다.
        x = new_x
        y = new_y
    
    return answer

댓글남기기