문제
문제 설명
체스에서 나이트(knight)는 아래 그림과 같이 동그라미로 표시된 8개의 방향중 한 곳으로 한 번에 이동이 가능합니다.
단, 나이트는 체스판 밖으로는 이동할 수 없습니다.
체스판의 각 칸의 위치는 다음과 같이 표기합니다.
예를 들어, A번줄과 1번줄이 겹치는 부분은 'A1'이라고 합니다.
나이트의 위치 pos가 매개변수로 주어질 때, 나이트를 한 번 움직여서 이동할 수 있는 칸은 몇개인지 return 하도록 solution 함수를 완성해주세요.
매개변수 설명
- 나이트의 위치 pos가 solution 함수의 매개변수로 주어집니다.
- pos는 A부터 H까지의 대문자 알파벳 하나와 1 이상 8이하의 정수 하나로 이루어진 두 글자 문자열입니다.
- 잘못된 위치가 주어지는 경우는 없습니다.
return 값 설명
- 나이트를 한 번 움직여서 이동할 수 있는 칸의 개수를 return 해주세요.
예시
예시 설명
- 나이트가 A7 위치에 있으면 아래 그림과 같이 왼쪽으로는 이동하지 못하고, 오른쪽으로는 맨 위를 제외한 나머지 세 칸으로 이동 가능합니다.
- 따라서, 3을 return 하면 됩니다.
int solution(char* pos) {
int answer = 0;
char row = pos[0];
char col = pos[1];
for (int i = 0; i < 8; i++)
{ // 8칸 중에서
char new_row = pos[0];
char new_col = pos[1];
char add_row = 0;
char add_col = 0;
switch (i)
{
case 0: add_row = +1; add_col = +2; break;
case 1: add_row = +2; add_col = +1; break;
case 2: add_row = +2; add_col = -1; break;
case 3: add_row = +1; add_col = -2; break;
case 4: add_row = -1; add_col = -2; break;
case 5: add_row = -2; add_col = -1; break;
case 6: add_row = -2; add_col = +1; break;
case 7: add_row = -1; add_col = +2; break;
}
// 이동시켰을 때, 범위를 보고..
new_row = row + add_row;
new_col = col + add_col;
//printf("%d - %c%c\n",i, new_row, new_col);
if (new_row < 'A' || new_row > 'H')
continue;
if (new_col < '1' || new_col > '8')
continue;
answer += 1;
}
return answer;
}
int main() {
char* pos = "A7";
int ret = solution(pos);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}
'CODING > Programmers' 카테고리의 다른 글
[Programmers] 석유 시추 (0) | 2024.05.06 |
---|---|
[Programmers] Cos Pro 1급 C 모의고사 - 메모장 (0) | 2023.10.06 |
[Programmers] Cos Pro 1급 C 모의고사 - 지그재그 부분 수열 (0) | 2023.09.12 |
[Programmers] Cos Pro 1급 C 모의고사 - 보드게임 (0) | 2023.09.02 |
[Programmers] Cos Pro 1급 C 모의고사 - 종이접기 (0) | 2023.08.20 |
댓글