
😎풀이
- 록(
R
)의 위치 탐색
- 록 위치를 기준으로
상
, 하
, 좌
, 우
탐색
2-1. 아군 비숍(B
)을 만났다면 탐색 종료
2-2. 폰(p
)을 만났다면 포인트 획득
- 획득한 포인트의 합계 반환
type CellType = 'B' | 'p' | '.' | 'R'
type DirectionType = { direction: 'up' | 'down' | 'left' | 'right' }
function numRookCaptures(board: string[][]): number {
let totalCapture = 0
let rookX = 0
let rookY = 0
for (let y = 0; y < 8; y++) {
for (let x = 0; x < 8; x++) {
if (board[y][x] === 'R') {
rookX = x
rookY = y
break
}
}
}
function isAvailable(curCell: string): boolean {
switch (curCell) {
case 'B':
return false
case 'p':
return true
default:
return false
}
}
function searchDirection({ direction }: DirectionType) {
switch (direction) {
case 'up':
for (let curY = rookY - 1; curY >= 0; curY--) {
const curCell = board[curY][rookX]
if (curCell === '.') continue
if (isAvailable(curCell)) totalCapture++
break
}
break
case 'down':
for (let curY = rookY + 1; curY < 8; curY++) {
const curCell = board[curY][rookX]
if (curCell === '.') continue
if (isAvailable(curCell)) totalCapture++
break
}
break
case 'left':
for (let curX = rookX - 1; curX >= 0; curX--) {
const curCell = board[rookY][curX]
if (curCell === '.') continue
if (isAvailable(curCell)) totalCapture++
break
}
break
case 'right':
for (let curX = rookX + 1; curX < 8; curX++) {
const curCell = board[rookY][curX]
if (curCell === '.') continue
if (isAvailable(curCell)) totalCapture++
break
}
break
}
}
searchDirection({ direction: 'up' })
searchDirection({ direction: 'down' })
searchDirection({ direction: 'left' })
searchDirection({ direction: 'right' })
return totalCapture
}