Algorithms/Implementation
[구현 알고리즘] 왕실의 나이트 ★☆☆
잉숭
2021. 2. 10. 17:53
문제 설명 : 8*8 크기의 체스판에서 나이트의 위치가 주어질 때 나이트가 이동할 수 있는 경우의 수를 구하시오
입력 조건
- 조건 1 : 첫째 줄에 나이트의 위치가 영문과 숫자의 조합으로 이루어진 좌표가 입력된다
출력 조건
- 조건 1 : 첫째 줄에 나이트가 이동할 수 있는 경우의 수를 출력하시오
입력 예시
a1
출력 예시
2
입력값을 좌표로 변경한 뒤 모든 경우의 수를 조사하여 그 갯수를 출력하면 된다
개체가 이동할 수 있는 방법을 dx[], dy[]로 표현하는 것은 DFS, BFS에서 자주 사용되는 기법이어서 익숙했다
#include<bits/stdc++.h>
#define X first
#define Y second
using namespace std;
string pos;
int dx[] = {2,2,1,1,-1,-1,-2,-2};
int dy[] = {1,-1,2,-2,2,-2,1,-1};
int ans;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> pos;
pair<int, int> cur = { (int(pos[0]) - 96),(int(pos[1])-48)};
for (int dir = 0;dir < 8;dir++) {
int mx = cur.X + dx[dir];
int my = cur.Y + dy[dir];
if (mx < 1 || my < 1 || mx>8 || my>8) continue;
ans++;
}
cout << ans;
return 0;
}