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;
}