[프로그래머스/파이썬] Level 2 방문 길이

bye9·2021년 4월 20일
0

알고리즘(코테)

목록 보기
119/130

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


문제풀이

생각의 흐름대로 풀어, 코드가 좀 지저분한 것 같지만 논리는 다음과 같다.
0,0에서 시작해서 각 방향에 따라 해당하는 좌표가 그래프를 넘어가는지 확인하고 안넘어간다면 0,0->0,1 or 0,1->0,0으로 간 적이 있다면 continue한다.
처음 가는 길이라면 visited에 추가해주고 visited의 길이를 리턴해주면 정답이다.

소스코드

def solution(dirs):
    visited=[]
    start=(0,0)
    for direct in dirs:
        i,j=start
        if direct=="U":
            if i>=-5 and i<=5 and j+1>=-5 and j+1<=5:
                end=(i,j+1)
                if (start,end) in visited or (end,start) in visited:
                    start=end
                    continue
                visited.append((start,end))
                start=end
                #print(visited)
        elif direct=="L":
            if i-1>=-5 and i-1<=5 and j>=-5 and j<=5:
                end=(i-1,j)
                if (start,end) in visited or (end,start) in visited:
                    start=end
                    continue
                visited.append((start,end))
                start=end
                #print(visited)
        elif direct=="R":
            if i+1>=-5 and i+1<=5 and j>=-5 and j<=5:
                end=(i+1,j)
                if (start,end) in visited or (end,start) in visited:
                    start=end
                    continue
                visited.append((start,end))
                start=end
                #print(visited)
        elif direct=="D":
            if i>=-5 and i<=5 and j-1>=-5 and j-1<=5:
                end=(i,j-1)
                if (start,end) in visited or (end,start) in visited:
                    start=end
                    continue
                visited.append((start,end))
                start=end
                #print(visited)
                
    return len(visited)

더 간단한 코드

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

0개의 댓글