티스토리 뷰

728x90
반응형

문제

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

 

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

 

programmers.co.kr

 

코드

def solution(dirs):
    answer = 0
    dxs, dys = [-1, 0, 1, 0], [0, -1, 0, 1] # x,y 좌표로 안보고 행과열로 봄
    d = {"U": 0, "L":1, "D":2, "R":3}
    visited = set()
    answer = 0
    x, y = 0, 0
    for dir in dirs:
        i = d[dir]
        nx, ny = x + dxs[i], y + dys[i]
        if nx < -5 or nx > 5 or ny < -5 or ny > 5:
            continue
        if (x,y,nx,ny) not in visited:
            visited.add((x, y, nx, ny))
            visited.add((nx, ny, x, y))
            answer += 1
        x, y = nx, ny
    return answer

U, L, D, R 일때 각각 이동시킬 수 있게 리스트를 선언해준다.

 

-5 ~ 5 까지로 범위가 정해져 있으므로 범위를 초과하면 continue 시켜준다.

 

처음 방문한 길의 길이만 구하기 때문에 set으로 중복값을 제거해준다.

근데 (0, 0)에서 (0,1)을 가는 것과 (0,1)에서 (0,0)을 가는 것은 똑같은 길이기 때문에 길은 양방향이라는 것이 중요하다.

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31