FrontEnd/프로그래머스

[JS] 방문 길이

728x90

방문 배열을 설정하는데, 방문한 좌표를 기록해 나가는 것이 아닌, 길을 저장하는게 문제의 키 포인트이다.

 

 

따라서 방문된 곳을 저장하는 배열에 상,하,좌,우를 기록하기위해 3차원 배열을 통해 각 좌표마다

 

[false,false,false,false] 와 같이 저장하게 해두었다.

 

각각 상,우,하,좌 순서대로 저장하게 해 두었고 만약 방문하지 않은 배열이라면 해당 길들을 방문처리 해주면된다.

 

 

 

 

function solution(dirs) {
    const d = {
        "U" : [0,-1],
        "R" : [1,0],
        "D" : [0,1],
        "L" : [-1,0],
    }
    const dIdx = {
        "U" : 2,
        "R" : 3,
        "D" : 0,
        "L" : 1,
    }
    
    const ndIdx = {
        "U" : 0,
        "R" : 1,
        "D" : 2,
        "L" : 3,
    }
    
    const dp = new Array(11).fill(0).map(_ => new Array(11).fill(0).map(v => [false,false,false,false]))
    

    let x = 5
    let y = 5
    let ret = 0
    for (const order of dirs) {
        const [dx,dy] = d[order]
        const [nx,ny] = [x + dx,y+dy]
        
        
        if (0<= nx && nx <= 10 && 0<=ny && ny <= 10) {
            
            if (dp[ny][nx][dIdx[order]]) {
                x = nx
                y = ny
                continue
            }
            dp[ny][nx][dIdx[order]] = true
            dp[y][x][ndIdx[order]] =true
            x = nx
            y = ny
            ret ++
        }
    }
    return ret
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 타겟 넘버  (0) 2023.06.27
[JS] 스킬트리  (0) 2023.06.27
[JS] 문자열 압축  (0) 2023.06.25
[JS] 괄호 변환  (0) 2023.06.25
[JS] 프렌즈4블럭  (0) 2023.06.23