반응형
방문 길이 ( 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]
- 좌표값 이동 후 위에서 작성한 방식의 결과값을
arr
에 담는다. - 이중배열의 구조인
arr
의 값을 비교하기 위해 문자열로 형변환 후에 set으로 중복을 제거하고 length를 리턴