Lennon FE

[프로그래머스] 거리두기 확인하기 (js) 본문

🔥 Algorithm/Programmers

[프로그래머스] 거리두기 확인하기 (js)

Lennon 2021. 10. 30. 22:52
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/81302?language=javascript 

 

코딩테스트 연습 - 거리두기 확인하기

[["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1]

programmers.co.kr

 

function solution(places) {
   const leng = places[0].length;
   return places.map(v => {
       let check = 1;
       Loop2 :
       for(let j = 0; j < leng; j++){
           if(v[j].includes('PP') || v[j].includes('POP')) {
               check = 0;
               break;
           }
           for(let k = 0; k < leng; k++){
               if(j < leng-2 && v[j][k]==='P' && 
                  v[j+1][k]==="O" && v[j+2][k]==="P") {
                       check = 0;
                       break Loop2;
               } // 세로 POP
               else if(j < leng-1 && v[j][k]==='P' && v[j+1][k]==="P") {
                       check = 0;
                       break Loop2;
               } // 세로 PP
               else if(j < leng-1 && k < leng -1 && (v[j][k]==='P' && v[j+1][k+1]==='P') &&
                      (v[j+1][k]==='O' || v[j][k+1]==='O')) {
                       check = 0;
                       break Loop2;
               } // 대각선 PO  PX  PO
                 //       OP  OP  XP
               else if(j < leng-1 && k < leng -1 && (v[j][k+1]==='P' && v[j+1][k]==='P') &&
                      (v[j][k]==='O' || v[j+1][k+1]==='O')) {
                       check = 0;
                       break Loop2;
               } // 반대 대각선 OP  XP  OP
                 //           PO  PO  PX
           }
       }
       return check;
   })
}

결과값이 배열형태라 map으로 바로 리턴하였다.

 

거리두기가 안되는 상황의 경우의 수를 모두 찾아 인덱스를 조심하며 검증한다.

 

만약 거리두기가 안되는 경우이면 check에 0을 대입하고, 효율성을 위해 바로 모든 반복문을 빠져 나간다

(break Loop2;)

 

그 후 바로 리턴하면 결과값을 찾을 수 있다.

 

이런 문제는 index를 조심하며 검증해야한다.

 

만약  Cannot read property '0' of undefined 해당 오류가 뜨면 index쪽에 오류가 생긴거니까 잘 파악하자.

ex) index를 넘어서거나 index가 음수

728x90
반응형
Comments