[프로그래머스] LV2. 방문길이 - 파이썬

곌로그·2023년 4월 24일
0

[python]코딩테스트

목록 보기
2/34
post-thumbnail

문제 링크


문제 요약

캐릭터는 (0,0)에서 시작한다. U,L,D,R 방향어에따라 1칸 씩 이동하며 -5<x<5 그리고 -5<y<5 범위를 벗어날 수 없다. 이때, 캐릭터가 처음 지나가 본 거리에대해서 반환한다.


문제 풀이


def solution(dirs):
    #오왼 위 아래
    dx = [1,-1,0,0]
    dy = [0,0,1,-1]
    answer = 0
    DIR = {"U": 2, "D": 3, "R": 0, "L": 1}
    x,y = 0,0
    visited = set()

    for d in dirs:
        #딕셔너리에서 방향에따른 좌표이동을 꺼내서 way 변수에 저장
        way = DIR[d]
        #nx = next x 좌표, ny = next y 좌표
        nx, ny = x + dx[way], y + dy[way]
        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 = nx
        y = ny
        
    #print(answer)
    return answer

📌 고려해야할 점

visited.add((x,y,nx,ny))
visited.add((nx,ny,x,y))

처음 문제 풀이 시에 visited.add((nx,ny,x,y))를 놓쳤다. 처음 방문해 본 길에대해서만 고려하기 때문에 양방향으로 모두 visitied에 저장해주어야한다. 이 부분을 놓쳐 바로 정답을 맞출 수 없었다.

  • 딕셔너리에 방향어와 인덱스를 저장하여 접근하기
  • 딕셔너리에 x, y좌표와 더불어 next x, next y도 함께 visitied에 저장해 중복을 체크해주는 것

0개의 댓글