FrontEnd/프로그래머스

[JS] 거리두기 확인하기

728x90

파티션이 있는경우, 거리가 2 이내여도 거리두기를 했다고 가정한다..

 

라는 조건이 있어서 dfs로 구현했다.

 

먼저 dfs함수를 하나 만들어서 주변에 2 맨하튼 거리 이내에 P가 있는지 검사해주는 함수를 만든다.

 

checkDistance함수에서는 2차원 배열을 받아서 P가있는곳을 찾아서 해당 P 근처에 P가있는지 검사해준다.

 

 

이때 한 사람이라도 거리두기를 못했다면 0을 반환하게 하고 모든 사람이 통과했다면 1을 반환하게 해주었다.

 

 

function solution(places) {
    const dx = [1,0,-1,0]
    const dy = [0,1,0,-1]
    
    const dfs = (x,y,dist,place) => {
            
            if (place[y][x]==='P') return true
            for (let k = 0 ; k < 4 ; k ++){
                const nx = x + dx[k]
                const ny = y + dy[k]
                if (0<=nx&&nx<5&&0<=ny&&ny<5&&place[ny][nx]!=='X'&&dist<2){
                    if (dfs(nx,ny,dist+1,place)) return true
                }
            }
            return false
            
        }
    
    const checkDistance = (place) => {
        for (let i = 0 ; i<5 ; i++){
            for ( let j = 0 ; j<5 ; j++){
                if (place[i][j]!=="P") continue
                place[i]= place[i].slice(0,j) + "X" + place[i].slice(j+1)
                if (dfs(j,i,0,place)) return 0
            }
        }
        return 1
    }
    
    return places.map(place => checkDistance(place))
    
}
728x90

'FrontEnd > 프로그래머스' 카테고리의 다른 글

[JS] 행렬 테두리 회전하기  (0) 2023.06.14
[JS] 두개 이하로 다른 비트  (0) 2023.06.13
[JS] 모음 사전  (0) 2023.06.13
[JS] 빛의 경로 사이클  (0) 2023.06.10
[JS] 전력망을 둘로 나누기  (0) 2023.06.09