Algorithm/programmers

방문 길이 ( Level 2, JavaScript, Summer/Winter Coding )

takeU 2021. 8. 1. 14:38
반응형

방문 길이 ( Level 2 )

Summer/Winter Coding ~2018 ( JavaScript )

문제 링크

 

나의 풀이

function solution(dirs) {
    const arr = []
    let cur = [0,0]
    for ( let i = 0; i < dirs.length; i++ ) {
        switch ( dirs[i] ) {
            case "L":
                if ( cur[0] >= -4 ) {
                    cur[0] -= 1
                    arr.push([cur[0] + 0.5, cur[1]])
                }
                break;
            case "R":
                if ( cur[0] <= 4 ) {
                    cur[0] += 1
                    arr.push([cur[0] -0.5, cur[1]])
                }
                break;
            case "U":
                if ( cur[1] <= 4 ) {
                    cur[1] += 1
                    arr.push([cur[0], cur[1] - 0.5])
                }
                break;
            case "D":
                if ( cur[1] >= -4 ) {
                    cur[1] -= 1
                    arr.push([cur[0], cur[1] + 0.5])
                }
                break;
        }
    }
    return [...new Set(arr.map(el => ''+el))].length
}

[0, 0] -> [0, 1][1, 0] -> [0, 0]이 동일한 경로로 이동하기 때문에 이를 구분짓기 위해서

움직이는쪽의 좌표를 평균값으로 대체함

ex) [0, 0] -> [0, 1][1, 0] -> [0, 0][0, 0.5]

[1, -2] -> [2, -2][2, -2] -> [1, -2][1.5, -2]

  1. 좌표값 이동 후 위에서 작성한 방식의 결과값을 arr에 담는다.
  2. 이중배열의 구조인 arr의 값을 비교하기 위해 문자열로 형변환 후에 set으로 중복을 제거하고 length를 리턴