문제
체스에서 말이 움직이는 방법은 아래와 같다. - 수직으로 두 칸 이동 후 수평으로 한 칸 이동 - 수평으로 두 칸 이동 후 수직으로 한 칸 이동 체스에서 말의 위치가 입력될 때, 체스판 안에서 움직일 수 있는 경우의 수를 구하시오 |
코드
#include <iostream>
using namespace std;
int dx[] = { 1, 1, -1, -1, 2, 2, -2, -2 };
int dy[] = { 2, -2, 2, -2, 1, -1, 1, -1 };
int main() {
string position;
cin >> position;
int x = position[0] - 96, y = position[1] - 48, cnt = 8;
for (int i = 0; i < 8; i++)
if ((x + dx[i] > 8) || (x + dx[i] < 1) || (y + dy[i] > 8) || (y + dy[i] < 1))
cnt--;
cout << cnt;
}
풀이
1. 배열 dx와 dy에 말이 x축, y축으로 움직일 수 있는 방향을 서로의 인덱스에 맞게 입력한다.
2. 처음 위치를 position에 입력받고 아스키코드를 활용해 위치를 인덱스로 바꾸어 x, y에 저장한다.
3. 움직일 수 있는 최대치의 경우의 수는 8이므로 cnt에 8을 저장한다.
4. x와 y에 dx, dy의 원소를 하나씩 더해 그 값이 체스판에서 벗어나면 cnt를 감소시킨다.
'코테 > 구현' 카테고리의 다른 글
[C/C++] 나동빈 문자열 재정렬, 구현 (0) | 2023.02.15 |
---|---|
[C/C++] 백준 18406, 구현 (0) | 2023.02.15 |
[C/C++] 나동빈 게임 개발, 구현 (0) | 2023.02.15 |
[C/C++] 나동빈 시각, 구현 (0) | 2023.02.15 |
[C/C++] 나동빈 상하좌우, 구현 (0) | 2023.02.15 |