코딩 테스트/프로그래머스 코딩 테스트 연습
[JS] [PCCP 기출문제] 3번 충돌위험 찾기
58청춘
2024. 11. 5. 20:49
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/340211
풀이
이 문제의 경우 각 로봇이 움직이는 시간별로 위치를 객체에 담아 중복되는 경우를 탐지해야한다.
코드
function solution(points, routes) {
let answer = 0;
const map = new Map();
const pos = [];
points.forEach(([y, x], i) => {
map.set(i + 1, [y, x]);
});
routes.forEach((e) => {
let time = 0;
let last = [0, 0];
for (let i = 0; i < e.length - 1; i++) {
let [sY, sX] = map.get(e[i]);
let [eY, eX] = map.get(e[i + 1]);
while (sY !== eY || sX !== eX) {
if (!pos[time]) pos[time] = {};
if (!pos[time][sY]) pos[time][sY] = {};
pos[time][sY][sX] = (pos[time][sY][sX] || 0) + 1;
if (pos[time][sY][sX] === 2) answer += 1;
if (sY > eY) sY--;
else if (sY < eY) sY++;
else if (sX > eX) sX--;
else if (sX < eX) sX++;
last = [sY, sX];
time++;
}
}
if (!pos[time]) pos[time] = {};
if (!pos[time][last[0]]) pos[time][last[0]] = {};
pos[time][last[0]][last[1]] = (pos[time][last[0]][last[1]] || 0) + 1;
if (pos[time][last[0]][last[1]] === 2) answer += 1;
})
return answer;
}
728x90