코린이의 소소한 공부노트

[LeetCode/Easy] 999. Available Captures for Rook 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 999. Available Captures for Rook

무지맘 2023. 6. 6. 22:21

1. Input

1) char[][] board

- board8*8 체스보드를 나타낸다.

- ‘R': . board에 딱 1개뿐이다. 상하좌우 중 한 방향을 선택해 가고싶은 만큼 이동할 수 있다.

- 'B': 비숍. 비숍에 막히면 룩은 이동할 수 없다.

- ‘p: . 룩이 잡을 수 있는 말이다.

- ‘.': 보드의 빈 공간을 뜻한다.

 

2. Output

1) (R)이 잡을 수 있는 폰의 개수를 반환

 

3. Constraint

1) board.length == 8

2) board[i].length == 8

3) board에는 'R', '.', 'B', 'p' 이외의 문자는 없다.

 

4. Example

Input: board = [[".",".",".",".",".",".",".","."],                       -> Output: 3

                              [".",".",".","p",".",".",".","."],

                              [".",".",".","p",".",".",".","."],

                              ["p","p",".","R",".","p","B","."],

                              [".",".",".",".",".",".",".","."],

                              [".",".",".","B",".",".",".","."],

                               [".",".",".","p",".",".",".","."],

                              [".",".",".",".",".",".",".","."]]

설명: 룩이 이동해서 잡을 수 있는 폰은 빨간색으로 표시된 것이다.

 

5. Code

1) 첫 코드(2023/06/06)

class Solution {
    public int numRookCaptures(char[][] board) {
        int row = 0, col = 0;
        for(int i=0 ; i<8 ; i++)
            for(int j=0 ; j<8 ; j++)
                if(board[i][j]=='R'){
                    row = i; col = j; break;
                }
        int ans = 0;
        int x = row;
        while(--x>=0){
            if(board[x][col]=='p'){
                ans++; break;
            } else if(board[x][col]=='B')
                break;
        }
        x = row;
        while(++x<8){
            if(board[x][col]=='p'){
                ans++; break;
            } else if(board[x][col]=='B')
                break;
        }
        x = col;
        while(--x>=0){
            if(board[row][x]=='p'){
                ans++; break;
            } else if(board[row][x]=='B')
                break;
        }
        x = col;
        while(++x<8){
            if(board[row][x]=='p'){
                ans++; break;
            } else if(board[row][x]=='B')
                break;
        }
        return ans;
    }
}

- 100%, 49%