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 |