본문 바로가기
CodeSignal

Bishop and Pawn

by Doromi 2023. 12. 30.
728x90
반응형

표준 체스 보드에서 흰 비숍(white bishop)이 검은 폰(black pawn)을 한 번의 이동으로 잡을 수 있는지 여부를 판단하는 문제입니다. 비숍은 대각선으로만 움직일 수 있습니다.

문제의 입력은 두 개의 문자열 bishop와 pawn으로 주어지는데, 각각은 체스 보드의 좌표를 나타냅니다. 좌표는 문자와 숫자의 조합으로 이루어져 있으며, 문자는 'a'부터 'h'까지의 알파벳이고, 숫자는 1부터 8까지의 정수입니다.

예를 들어, "a1"은 첫 번째 열의 첫 번째 행을 나타내고, "c3"은 세 번째 열의 세 번째 행을 나타냅니다.

문제의 목표는 비숍이 한 번의 이동으로 폰을 잡을 수 있는지 여부를 판단하여 true 또는 false를 반환하는 것입니다.

예를 들어, "a1" 위치의 비숍이 "c3" 위치의 폰을 잡을 수 있는 경우에는 true를 반환해야 합니다. 하지만 "h1" 위치의 비숍이 "h3" 위치의 폰을 잡을 수 없는 경우에는 false를 반환해야 합니다.

bool solution(string bishop, string pawn) {
    int diff_first = Convert.ToInt32(bishop[0]) - Convert.ToInt32(pawn[0]);
    int diff_second =  Int32.Parse(bishop[1].ToString()) -  Int32.Parse(pawn[1].ToString());
    return Math.Abs(diff_first) == Math.Abs(diff_second);
}
int diff_first = Convert.ToInt32(bishop[0]) - Convert.ToInt32(pawn[0]);: bishop와 pawn의 첫 번째 문자의 ASCII 값 차이를 계산합니다. 이 값은 열(Column) 간의 차이를 나타냅니다.

int diff_second = Int32.Parse(bishop[1].ToString()) - Int32.Parse(pawn[1].ToString());: bishop와 pawn의 두 번째 문자를 각각 문자에서 정수로 변환한 후 차이를 계산합니다. 이 값은 행(Row) 간의 차이를 나타냅니다.

return Math.Abs(diff_first) == Math.Abs(diff_second);: 열(Column) 간의 차이와 행(Row) 간의 차이의 절대값이 서로 같으면, 비숍은 폰을 대각선으로 한 번에 잡을 수 있는 위치에 있다는 뜻이므로 true를 반환합니다. 그렇지 않으면 false를 반환합니다.

 

bool solution(string bishop, string pawn)
    {
        // 비숍과 폰의 좌표를 각각 추출
        int bishopX = bishop[0] - 'a' + 1;
        int bishopY = int.Parse(bishop[1].ToString());

        int pawnX = pawn[0] - 'a' + 1;
        int pawnY = int.Parse(pawn[1].ToString());

        // 비숍과 폰의 좌표 차이가 서로 같은 대각선 상에 있는지 확인
        return Math.Abs(bishopX - pawnX) == Math.Abs(bishopY - pawnY);
    }
비숍과 폰의 좌표를 추출하고,

체스 보드의 좌표를 숫자로 변환하는 과정입니다. 체스 보드의 열을 나타내는 문자 'a'부터 'h'까지를 숫자로 변환하는데 사용됩니다. 이렇게 하는 이유는 프로그래밍에서 문자열을 숫자로 변환하기 위해 ASCII 코드를 활용하기 때문입니다.
알파벳 소문자 'a'의 ASCII 코드는 97이고, 'b'는 98, 'c'는 99, ..., 'h'는 104입니다. 따라서 'a'부터 'h'까지의 알파벳을 숫자로 변환하려면 'a'의 ASCII 코드를 빼고 1을 더해주면 됩니다.
예를 들어, 'a'를 숫자로 변환하면 97 - 97 + 1 = 1이 됩니다. 'b'는 98 - 97 + 1 = 2, 'c'는 99 - 97 + 1 = 3, ..., 'h'는 104 - 97 + 1 = 8이 됩니다.
이런 변환을 통해 각 열의 문자를 숫자로 매핑하여 체스 보드의 좌표를 표현할 수 있습니다. 따라서 bishop[0] - 'a' + 1은 bishop의 첫 번째 문자를 해당 열의 숫자로 변환하는 부분입니다.

그 좌표 차이가 서로 같은 대각선 상에 있는지를 확인하여 true 또는 false를 반환합니다.
대각선 상에 있을 때의 조건은 두 좌표의 x 차이와 y 차이의 절대값이 같아야 합니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

buildPalindrome  (0) 2023.12.31
isBeautifulString  (0) 2023.12.31
digitDegree  (0) 2023.12.30
longestDigitsPrefix  (1) 2023.12.30
arrayMaxConsecutiveSum  (1) 2023.12.24