Level 2️⃣ - 방문길이

2024. 4. 7. 13:07알고리즘/프로그래머스

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

 

프로그래머스

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

programmers.co.kr

 

🚀문제 해석

캐릭터가 처음 걸어 본 길의 길이를 구하는 문제이다.

한번 갔던 길은 다시 중복해서 구하면 안된다. 때문에 Set 자료형을 고려할 수 있다.

이때 또 주의할 점이 있다.

A ➡ B로 가는 경로랑 B ➡ A로 반대로 가는 경로도 중복하면 안된다. 새로운 길이 아니기 때문이다.

이 부분을 고려하지 않아 처음 구현할 때 오류가 나왔다.

 

코드

Set에 A➡B로 가는 것과 B➡A로 가는 것을 문자열로 표현해 저장하는 과정이 인상깊다.

function solution(dirs) {
    let start = [0, 0];
    let directions = {
        "U" : [0, 1],
        "D" : [0, -1],
        "R" : [1, 0],
        "L" : [-1, 0],
    };
    let path = new Set();
    for(const d of dirs){
        let next = [start[0] + directions[d][0], start[1] + directions[d][1]];
        if(next[0] > 5 || next[0] < -5 || next[1] > 5 || next[1] <-5) continue;
        path.add("" + next[0] + next[1] + start[0] + start[1]);
        path.add("" + start[0] + start[1] + next[0] + next[1]);
        start = next;
    }
    return path.size / 2;
}