개발자를 희망하는 죠르디가 카카오에 면접을 보러 왔습니다.
코로나 바이러스 감염 예방을 위해 응시자들은 거리를 둬서 대기를 해야하는데 개발 직군 면접인 만큼
아래와 같은 규칙으로 대기실에 거리를 두고 앉도록 안내하고 있습니다.
응시자가 앉아 있는 자리(P
)일 경우 거리두기를 지키고 있는지 확인한다.
// 일직선
P O P
// 대각선
PX
OP
function solution(places) {
const dx = [-1, -1, -1, 0, 0, -1, 1, 1, -2, 0, 0, 2];
const dy = [-1, 0, 1, -1, 1, 1, 0, 1, 0, -2, 2, 0];
function checkDistance(x, y, arr) {
for (let k = 0; k < dx.length; k++) {
const nx = x + dx[k];
const ny = y + dy[k];
if (nx < 0 || nx >= 5 || ny < 0 || ny >= 5) continue;
if (arr[nx][ny] !== 'P') continue;
const dist = Math.abs(nx - x) + Math.abs(ny - y);
if (dist === 1) return 0;
else if (nx === x || ny === y) {
if (arr[(nx + x) / 2][(ny + y) / 2] === 'O') return 0;
} else {
if (arr[nx][y] !== 'X' || arr[x][ny] !== 'X') return 0;
}
}
return 1;
}
let ans = [];
places.map(place => {
const arr = [];
place.map(x => arr.push(x.split('')));
let flag = 1;
for (let i = 0; i < 5; i++) {
for (let j = 0; j < 5; j++) {
if (arr[i][j] === 'P') {
flag = checkDistance(i, j, arr);
if (!flag) break;
}
}
if (!flag) break;
}
ans.push(flag);
});
return ans;
}