[Level2] 방문길이
방문길이
틀린 코드
function solution(dirs) {
let x = 0;
let y = 0;
const dir = dirs.split('');
let set = [];
set.push(`${x}${y}`);
for (let i = 0; i < dir.length; i++) {
switch (dir[i]) {
case 'U':
x += 1;
break;
case 'D':
x -= 1;
break;
case 'R':
y += 1;
break;
case 'L':
y -= 1;
break;
}
if (x < -5 || x > 5 || y < -5 || y > 5) continue;
if (!set.includes(`${x}${y}`)) set.push(`${x}${y}`);
}
return set.length;
}
에제는 통과 됐는데, 제출문제는 모든 것이 오류가 났다.
테스트케이스를 알 수 있으면 좋을텐데 도저히 어디가 문제인지를 찾지 못했다.ㅠ
정답 코드
function solution(dirs) {
const move = { U: [1, 0], D: [-1, 0], L: [0, -1], R: [0, 1] };
let set = new Set();
let now = [0, 0];
for (let i = 0; i < dirs.length; i++) {
let nx = now[0] + move[dirs[i]][0];
let ny = now[1] + move[dirs[i]][1];
if (nx < -5 || nx > 5 || ny < -5 || ny > 5) continue;
set.add('' + now[0] + now[1] + nx + ny);
set.add('' + nx + ny + now[0] + now[1]);
now = [nx, ny];
}
return set.size / 2;
}
접근 방식의 문제점을 깨달았다.
처음 코드는 내가 간 꼭지점 좌표만 기억해뒀다.
즉 예를 들어 1,1이 있다면 이게 왼쪽에서 온건지 오른쪽에서 온건지, 위인지, 아래인지를 몰랐던 것
그래서 온 경로로 기억시켰다.
경로는 0,0 에서 1,1 간 경로와 1,1에서 0,0으로 간 경로가 동일하기 때문에 둘 다 저장후 마지막을 2로 나누었다.
그리고 다른분의 코드를 보니 문자열 배열로 만들지 않고, 객체 key로 접근하는 좋은 방법이 있길래 활용했다!