차곡차곡

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

CS/Algorithm

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

sohy 2023. 4. 28. 19:41

프로그래머스 - 방문 길이

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def in_range(x, y):
    return -5 <= x <= 5 and -5 <= y <= 5

def solution(dirs):
    x, y = 0, 0
    dic = {"U": [0, 1], "D": [0, -1], "L": [-1, 0], "R": [1, 0]}
    trace = set()
    answer = 0
    for d in dirs:
        dx, dy = x + dic[d][0], y + dic[d][1]
        if in_range(dx, dy):
            if not ((x, y, dx, dy) in trace or (dx, dy, x, y) in trace):
                trace.add((x, y, dx, dy))
                answer += 1
            x, y = dx, dy           
    return answer
  1. 현재 위치를 나타내는 x, y 변수 (0, 0으로 초기화)
  2. 명령어에 따른 x, y의 이동 값을 딕셔너리 형태로 저장한 dic 변수
  3. x, y의 이동 경로를 저장하는 trace 집합
  4. 길의 길이를 저장한 answer 변수
  5. 명령어를 하나씩 보면서 현재 위치에서 명령어에 따라 이동했을 때 위치를 dx, dy에 저장한다.
  6. dx, dy 값이 좌표를 벗어나지 않았는지 in_range() 함수로 확인해준다.
  7. 현재 위치와 이동 위치, 즉 이동 경로가 trace 집합에 없다면 처음 걷는 길로 trace에 해당 경로를 저장하고, 길의 길이를 + 1 해준다.
  8. 현재 위치를 dx, dy의 값으로 갱신해준다.

Comments