QueensAttacktheKing
Published at 2022-05-14
class Solution:
def queensAttacktheKing(self, queens: List[List[int]], king: List[int]) -> List[List[int]]:
res = []
def bfs(king, dx, dy):
if 0<=king[0]<8 and 0<=king[1]<8:
if king in queens:
res.append(king)
else:
bfs([king[0]+dx,king[1]+dy], dx, dy)
# 위부터 시계방향으로 검사
bfs(king[:], -1, 0)
bfs(king[:], -1, 1)
bfs(king[:], 0, 1)
bfs(king[:], 1, 1)
bfs(king[:], 1, 0)
bfs(king[:], 1, -1)
bfs(king[:], 0, -1)
bfs(king[:], -1, -1)
return res /**
* @param {number[][]} queens
* @param {number[]} king
* @return {number[][]}
*/
var queensAttacktheKing = function(queens, king) {
const res = [];
const bfs = (king, dx, dy) =>{
if(king[0]<0 || king[0]>=8 || king[1]<0 || king[1]>=8) return;
if(dx==0 && dy==0) return;
// 이중배열인 queens에서 배열인 king을 찾는거라 indexOf나 includes로는 검사 불가
if(queens.find((queen)=> queen[0] == king[0] && queen[1] == king[1])){
res.push(king);
}
else{
bfs([king[0]+dx, king[1]+dy], dx, dy)
}
return;
}
// 팔방 다 검사
for(const i of [-1,0,1]){
for(const j of [-1,0,1]){
bfs([king[0]+i, king[1]+j], i, j);
}
}
return res
};