😎풀이

  1. 록(R)의 위치 탐색
  2. 록 위치를 기준으로 , , , 탐색
    2-1. 아군 비숍(B)을 만났다면 탐색 종료
    2-2. 폰(p)을 만났다면 포인트 획득
  3. 획득한 포인트의 합계 반환
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

    // Rook 위치 찾기
    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
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글