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

Gaanii·2025년 5월 12일

Problem Solving

목록 보기
195/210
post-thumbnail

아래 프로그래머스 로고를 클릭하면 해당 문제로 이동합니다 😀

프로그래머스로고



풀이과정


구현 아이디어는 대충 이정도 흐름,,이다.

  • set으로 현재좌표 -> 다음좌표로 길을 저장한다.
  • 길은 방향을 구분하지 않고 한 번만 저장해야하므로 정렬을 해서 넣는다
  • 위치만 체크하면 중복된 길을 걸을 때 게속 카운트 되므로 길 단위로 추적해야 한다

코드


1. Python

from collections import deque

def solution(dirs):
    cx, cy = 0, 0
    visited = set()
    directions = {'U': [-1, 0], 'D': [1, 0], 'L': [0, -1], 'R': [0, 1]}

    for dir in dirs:
        dx, dy = directions[dir]
        mx, my = cx + dx, cy + dy
        
        if -5 <= mx <= 5 and -5 <= my <= 5:
            visited.add(((cx, cy), (mx, my)) if (cx, cy) < (mx, my) else ((mx, my), (cx, cy)))
            cx, cy = mx, my
    return len(visited)

2. JS

function solution(dirs) {
    let cx = 0, cy = 0;
    const visited = new Set();
    
    const directions = {'U': [-1, 0], 'D': [1, 0], 'L': [0, -1], 'R': [0, 1]};

    for (let dir of dirs) {
        const [dx, dy] = directions[dir];
        const mx = cx + dx;
        const my = cy + dy;

        if (mx >= -5 && mx <= 5 && my >= -5 && my <= 5) {
            const path = [[cx, cy], [mx, my]].sort().toString();
            visited.add(path);
            [cx, cy] = [mx, my];
        }
    }

    return visited.size;
}


결과


0개의 댓글