(r1, c1 + 1)
이 X
면 성공 아니면 실패(r1 + 1, c1)
이 X
면 성공 아니면 실패(r1, c2)
와 (r2, c1)
이 모두 X
면 성공 아니면 실패function solution(places) {
const result = [];
for (const place of places) {
const ps = [];
for (let i = 0; i < place.length; ++i) {
for (let j = 0; j < place[0].length; ++j) {
if (place[i][j] === 'P') ps.push([i, j]);
}
}
let flag = true;
for (let i = 0; i < ps.length - 1; ++i) {
for (let j = i + 1; j < ps.length; ++j) {
const [r1, c1] = ps[i];
const [r2, c2] = ps[j];
const d = Math.abs(r1 - r2) + Math.abs(c1 - c2);
if (d > 2) continue;
if (d < 2) {
flag = false;
break;
}
let partition = 1;
if (r1 !== r2 && c1 !== c2) partition = 2;
let cntX = 0;
for (let y = Math.min(r1, r2); y <= Math.max(r1, r2); ++y) {
for (let x = Math.min(c1, c2); x <= Math.max(c1, c2); ++x) {
if (place[y][x] === 'X') ++cntX;
}
}
if (partition !== cntX) flag = false;
}
if (!flag) break;
}
result.push(flag ? 1 : 0);
}
return result;
}
처음에 미로 찾기가 생각나서 DFS로 시도하다가 점점 복잡해져서 포기했다.
힌트를 보고 조건문으로 풀어보았다.
후 반복문 조건을 잘못 설정해서 디버깅하느라 거의 2시간이 걸렸다..