[프로그래머스 Lv2] 방문 길이 (파이썬)

Jewon Joel Park·2022년 7월 28일
0

Programmers-solution

목록 보기
31/34

문제 링크


문제 설명

좌표평면 상에서 원점 (0, 0)으로부터 주어진 이동 명령어 UDLR(상하좌우)를 실행했을 때, 지나간 길 중 처음 지나가본 길의 길이를 반환하는 함수 작성


풀이 코드

def solution(dirs):
    sets = set()
    y, x = 0, 0
    udrl = {'U': (1, 0), 'D': (-1, 0), 'R': (0, 1), 'L': (0, -1)}
    
    for d in dirs:
        dy, dx = udrl[d]
        ny = y + dy
        nx = x + dx
        if -5 <= ny <= 5 and -5 <= nx <= 5:
            sets.add(((y, x), (ny, nx)))
            sets.add(((ny, nx), (y, x)))
            y = ny
            x = nx
    return len(sets) // 2

코드 설명

  1. 처음 지나가 본 길의 길이가 필요하므로 중복을 제거하기 위한 set() 변수 sets를 설정
  2. 좌표평면 상 초기 위치 y, x를 각각 0으로 설정
  3. 주어진 명령어를 hashing하여 빠르게 방향값을 찾기위해 dict타입 변수 udrl을 설정하고, 각 명령어마다 이동해야하는 방향의 좌표값 설정
  4. for Loop으로 주어진 명령어 문자열 리스트에서 각 원소를 순회하며 이동방향 delta값 dy, dx 저장 및 명령어 수행 시 이동하게될 좌표 ny, nx 생성
  5. 제한사항에 따라 ny, nx 값이 각각 -5 ~ 5 범위 이내일 때에만 sets 변수에 ((기존좌표), (이동좌표)), ((이동좌표), (기존좌표)) 값을 저장하고 y, x를 이동좌표 값으로 업데이트
  6. 최종적으로 sets의 길이는 이동하게 된 거리의 2배가 되므로, 2로 나눈 몫을 반환
profile
10년을 돌고 돌아 마침내 제자리를 찾은 문과 출신 Python 개발자의 인생기록장

0개의 댓글