본문 바로가기
CodeSignal

chessKnight

by Doromi 2024. 1. 5.
728x90
반응형

나이트(Night)는 체스에서 독특한 움직임을 가진 말로, L자 형태로 움직입니다. 이동은 한 방향으로 두 칸(수평 또는 수직) 이동한 후에, 그 방향과 수직인 방향으로 한 칸 이동하는 것으로 이루어져 있습니다. 이러한 움직임은 나이트가 체스판에서 다른 말들을 뛰어넘을 수 있도록 해줍니다.

수평으로 오른쪽으로 두 칸 이동한 후 수직으로 위쪽으로 한 칸 이동.
수평으로 오른쪽으로 두 칸 이동한 후 수직으로 아래쪽으로 한 칸 이동.
수평으로 왼쪽으로 두 칸 이동한 후 수직으로 위쪽으로 한 칸 이동.
수평으로 왼쪽으로 두 칸 이동한 후 수직으로 아래쪽으로 한 칸 이동.
수직으로 위쪽으로 두 칸 이동한 후 수평으로 오른쪽으로 한 칸 이동.
수직으로 위쪽으로 두 칸 이동한 후 수평으로 왼쪽으로 한 칸 이동.
수직으로 아래쪽으로 두 칸 이동한 후 수평으로 오른쪽으로 한 칸 이동.
수직으로 아래쪽으로 두 칸 이동한 후 수평으로 왼쪽으로 한 칸 이동.


이것은 나이트가 체스판의 가운데 위치에서 할 수 있는 여덟 가지 움직임입니다. 나이트가 체스판의 가장자리나 모서리에 위치한 경우에는 가능한 움직임의 수가 줄어들 수 있습니다.

int solution(string cell) {
    int[] px = {-2,-2,-1,-1,1,1,2,2};
    int[] py = {-1,1,2,-2,2,-2,1,-1};
    int x = cell[0]-'a';
    int y = cell[1]-49;
    int count = 0;
    for(int i =0 ;i<8;i++){
        if(x+px[i]>=0 && y+py[i]>=0 && x+px[i]< 8 && y+py[i]<8) count++;
    }
    return count;
}
int[] px와 int[] py: 이동 가능한 8가지 방향에 대한 x 및 y 좌표의 변화를 나타내는 배열입니다. 각각이 x와 y의 변화값을 나타냅니다.

int x = cell[0] - 'a'; 및 int y = cell[1] - 49;: 주어진 체스 셀의 문자열 표현을 해당 셀의 x 및 y 좌표로 변환합니다. 'a'에서 현재 문자의 ASCII 값을 빼면 x 좌표를 얻을 수 있고, '1'에서 현재 문자의 ASCII 값을 빼면 y 좌표를 얻을 수 있습니다.

int count = 0;: 유효한 이동 방향의 개수를 세기 위한 변수를 초기화합니다.

for (int i = 0; i < 8; i++) { ... }: 8가지 이동 방향에 대한 반복문입니다.

if (x + px[i] >= 0 && y + py[i] >= 0 && x + px[i] < 8 && y + py[i] < 8) count++;: 현재 이동 방향이 체스판의 범위를 벗어나지 않으면 (x + px[i] >= 0 && y + py[i] >= 0 && x + px[i] < 8 && y + py[i] < 8), 유효한 방향으로 카운트를 증가시킵니다.
최종적으로 유효한 이동 방향의 개수인 count를 반환합니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

longestWord  (0) 2024.01.07
deleteDigit  (0) 2024.01.06
lineEncoding  (0) 2024.01.04
Is MAC48 Address?  (0) 2024.01.03
Elections Winners  (0) 2024.01.01