본문 바로가기
Programming/Programmers

[프로그래머스] 방문 길이 (Python)

by 데이터현 2021. 11. 4.

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

 

코딩테스트 연습 - 방문 길이

 

programmers.co.kr

 

set을 활용해서 풀면 된다.

주의해야 할 점은 (0, 0) -> (1, 0)으로 가는 길과 (1, 0) -> (0, 0)으로 가는 길은 동일한 길이다.

 

나의 풀이

from collections import defaultdict
def solution(dirs):
    answer = 0
    load = defaultdict(set)
    x, y = 0,0
    for dir in dirs:
        if dir =='U':
            if y+1 <6:
                load[(x,y)].update([(x,y+1)])
                load[(x,y+1)].update([(x,y)])
                x,y = x,y+1
        elif dir =='D':
            if y-1 >-6:
                load[(x,y)].update([(x,y-1)])
                load[(x,y-1)].update([(x,y)])
                x,y = x,y-1
        elif dir =='L':
            if x-1 >-6:
                load[(x,y)].update([(x-1,y)])
                load[(x-1,y)].update([(x,y)])
                x,y = x-1, y
        elif dir =='R':
            if x+1 <6:
                load[(x,y)].update([(x+1,y)])
                load[(x+1,y)].update([(x,y)])
                x,y = x+1,y
    for v in load.values():
        answer += len(v)
    return answer//2

 

다른 사람 풀이

def 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

 

로직은 동일한데 똑같은 작업에 대해 깔끔하게 정리해서 가져왔다.

문제를 풀면서 더 깔끔하게 정리할 수 있을 것 같다고 생각했는데 이렇게 dict를 활용해서 풀면 좋겠다는 생각이 들었다.

 

댓글