본문 바로가기

코딩테스트/Python

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

내 코드

def solution(dirs):
    cur=(0,0)
    l = set()

    for d in dirs:
        if d == "U":
            walk = (cur[0],cur[1]+1)
        elif d == "D":
            walk = (cur[0],cur[1]-1)
        elif d == "R":
            walk = (cur[0]+1,cur[1])
        else:
            walk = (cur[0]-1,cur[1])
        if walk[0] <= 5 and walk[0] >=-5 and walk[1] <= 5 and walk[1] >=-5:
            l.add((cur,walk))
            l.add((walk,cur))
            cur = walk
        
    return len(l)//2

현재 좌표, 움직인 다음의 좌표를 구해 집합에 넣는다. 좌표 2개가 있을때 움직이는 방향은 cur -> walk, cur->walk 두 종류가 존재하므로 집합에 두 경우의 수를 다 넣는다.

return 은 집합에 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

나는 경우의 수를 다 나눴는데 이 풀이는 d딕셔너리를 만들어서 풀었다. 풀이방법은 비슷하다!!!