제코드는 이러합니다 . 혹시 반례를 알려주실수 있으실까요??
function solution(points, routes) {
let crack = 0;
let starts = [];
let moves = [];
let movesIndex = [];
let pointCheck = {}
for(let i = 0;i<routes.length; i++){
let move = [];
let before = [];
for(let j = 0;j<routes[0].length; j++){
let point = points[routes[i][j]-1]
if(j===0){
let [y,x] = point;
if(checkCrack(pointCheck,point)) crack++;
starts.push([y,x])
}else{
let dy = point[0] - before[0];
let dx = point[1] - before[1];
move.push([dy,dx])
}
before = [...point]
}
moves.push(move)
movesIndex.push(0)
}
// console.log(starts)
// console.log(moves)
// console.log(crack)
let flag = true;
while(flag){
//한칸씩간다..
flag = false;
pointCheck = {}
for(let i = 0; i<moves.length ; i++){
//로봇마다..
if(moves[i].length-1 <movesIndex[i]) {
movesIndex[i];
continue;
}
flag = true;
let [dy,dx] = moves[i][movesIndex[i]];
if(dy===0 && dx===0){
movesIndex[i]++;
continue;
}
if(dy!==0){
let unit = dy/Math.abs(dy);
starts[i][0] += unit;
moves[i][movesIndex[i]][0] -= unit;
}else{
let unit = dx/Math.abs(dx);
starts[i][1] += unit;
moves[i][movesIndex[i]][1] -= unit;
}
if(checkCrack(pointCheck,starts[i])) crack++;
}
// console.log(starts)
// console.log(moves)
// console.log(movesIndex)
// console.log(crack,flag)
// console.log('---')
}
return crack;
}
function checkCrack(dict, point){
let [y,x] = point;
let key = `${y}${x}`
if(dict[key]){
dict[key]++;
if(dict[key]===2) return true
}else{
dict[key]=1
}
return false
}
70퍼 이상이 틀린다면 반례를 찾기보다는 로직을 한번 더 살펴보는게 좋을거 같아요.
한번 코드를 다시 읽어보면서 각 코드를 어떤 의도로 작성했는지, 변수들은 어떤 의미들이 있는지, 변수들이 가진 값이 의도에 맞게 들어간건지 확인해 보면서 주석을 달아가며 문제점을 찾아보세요.
그럼에도 모든 코드가 의도에 맞게 작성이 됐다면 의도한 것이 문제에서 바라는 방향의 논리를 가지고 있는건지, 그렇게 판단하는 이유는 무엇인지 다시 한번 생각해 보세요.