풀이 과정
- 현재 좌표 문자열('00', '02' 등)을 키로, 연결된 좌표 문자열 set을 값으로 갖는 객체 생성
- dirs의 각 문자에 대해 반복
- 다음 이동하는 좌표 계산
- 길을 지난 적이 있는지 객체를 가지고 확인
없으면 객체에 새로운 값 추가, 결과 +1
코드
function solution(dirs) {
const dir = {
U: [1, 0],
D: [-1, 0],
R: [0, 1],
L: [0, -1],
};
const obj = {};
let result = 0;
let [y, x] = [0, 0];
for (const d of dirs) {
const ny = y + dir[d][0];
const nx = x + dir[d][1];
if (ny < -5 || ny > 5 || nx < -5 || nx > 5) continue;
const [curr, next] = [[y, x].join(''), [ny, nx].join('')];
if (!obj[curr]) obj[curr] = new Set();
if (!obj[next]) obj[next] = new Set();
if (!obj[curr].has(next)) {
++result;
obj[curr].add(next);
obj[next].add(curr);
}
[y, x] = [ny, nx];
}
return result;
}