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 |