2021-08-21 테스트케이스 3번 실패...
function solution(places) {
return places.map((room,ir)=>{
const people = [];
const wall = new Set();
const desk = new Set();
setPosOf(people,'P',room);
setSetOf(wall,'X',room);
setSetOf(desk,'O',room)
const [SAFE,DANGER] = [true,false];
return people.every((p1,i1)=>{
return people.slice(i1+1).every((p2)=>{
const distance = getDistance(p1,p2);
if(distance<=1) return DANGER;
if(distance===2){
const isSameRow = p1[0]===p2[0];
const isSameCol = p1[1]===p2[1];
const DESK_DOWN = `${+p1[0]+1}${p1[1]}`;
const DESK_RIGHT = `${+p1[0]}${p1[1]+1}`;
if(isSameRow || isSameCol){
const checkDesk = isSameRow ? DESK_RIGHT : DESK_DOWN;
return desk.has(checkDesk) ? DANGER : SAFE;
}
const isRight = +p1[1] < +p2[1];
const w1 = `${+p1[0]+1}${p1[1]}`;
const w2 = isRight ? `${p1[0]}${+p1[1]+1}` : `${p1[0]}${+p1[1]-1}`;
if(!wall.has(w1) || !wall.has(w2)) return DANGER;
}
return SAFE;
})
}) ? 1 : 0;
})
}
function getDistance(p1,p2){
const [r1,c1] = p1.split('').map(s=>+s);
const [r2,c2] = p2.split('').map(s=>+s);
return Math.abs(r1-r2) + Math.abs(c1-c2);
}
function setPosOf(arr,token,room){
room.forEach((line,row)=>{
line.split('').forEach((o,col)=>{
if(o===token) arr.push(''+row+col);
});
});
}
function setSetOf(Set_,token,room){
room.forEach((line,row)=>{
line.split('').forEach((o,col)=>{
if(o===token) Set_.add(''+row+col);
});
});
}
+<String>` === Number(<String>)
''+<Number>+<Number> === `${<Number>}${<Number>}
const stringArr = <String>[]
const numberArr = stringArr.map((<String>)=> +<String>)
// #1
<Array>.forEach((_,i)=>{
<Array>.slice(i+1).forEach(()=>{/*...*/});
}
// #2
<Array>.forEach((_,i,arr)=>{
arr.slice(i+1).forEach(()=>{/*...*/}
}