프로그래머스 - 거리두기 확인하기

이경일·2021년 8월 21일
0

문제링크

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(()=>{/*...*/}
}
profile
React 초보

0개의 댓글