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

 


1. 문제

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

2. 풀이

2.1. 나의 풀이

지나간 선을 표기하기 위하여 아래와 같이 check 배열을 생성한 후에 (nr, nc, r, c), (r, c, nr, nc)가 모두 배열 안에 포함되었는지 확인합니다. 둘 중에 하나라도 포함되었으면 해당 선을 지나간 것이고, 아니면 지나가지 않은 것으로 간주합니다.

def solution(dirs):
    r, c = 5, 5
    dr, dc = [0, 0, -1, 1], [-1, 1, 0, 0]
    move_types =['L', 'R', 'U', 'D']
    check = []
    cnt = 0
    for dir in dirs:
        for move in range(len(move_types)):
            if dir == move_types[move]:
                nr = r + dr[move]
                nc = c + dc[move]
                if not (10<nr or 0>nr or nc>10 or nc<0):
                    if (nr, nc, r, c) not in check and (r, c, nr, nc) not in check: 
                        check.append((r, c, nr, nc))
                        check.append((nr, nc, r, c))
                        cnt += 1
                    r, c = nr, nc
    return cnt