반응형
출처: https://www.acmicpc.net/problem/1986
Input
4 4
2 1 4 2 4
1 1 2
1 2 3
Output
6
일반 체스와 다른 점은 Pawn은 상대팀의 말을 잡을 수 없기에 공간만 차지하고 있다고 보면 됩니다.
Queen → Knight → Pawn 순으로 위치를 입력받습니다.
움직일 수 있는 Queen과 Knight에 대해 잡을 수 있는 공간을 board[][]에 표시합니다.
#include <iostream>
using namespace std;
char board[1002][1002];
int N, M, cnt, answer = 0;
int Q_dx[] = { 0, 0, -1, 1, -1, -1, 1, 1 };
int Q_dy[] = { -1, 1, 0, 0, -1, 1, -1, 1 };
int K_dx[] = { -2, -2, 2, 2, -1, -1, 1, 1 };
int K_dy[] = { -1, 1, -1, 1, -2, 2, -2, 2 };
int nextX, nextY;
bool isRange(int x, int y) {
if (x < 1 || x > N || y < 1 || y > M) return false;
return true;
}
bool checkObstacle(int x, int y) {
if (board[x][y] == 'Q' || board[x][y] == 'K' || board[x][y] == 'P') return true;
return false;
}
void setBoard(char name, int cnt) {
int x, y;
for (int i = 0; i < cnt; i++) {
cin >> x >> y;
board[x][y] = name;
}
}
void moveQueen(int x, int y) {
for (int i = 0; i < 8; i++) {
nextX = x + Q_dx[i];
nextY = y + Q_dy[i];
while (true) {
if (!isRange(nextX, nextY)) break;
if (checkObstacle(nextX, nextY)) break;
board[nextX][nextY] = 'X';
nextX += Q_dx[i];
nextY += Q_dy[i];
}
}
}
void moveKnight(int x, int y) {
for (int i = 0; i < 8; i++) {
nextX = x + K_dx[i];
nextY = y + K_dy[i];
if (!isRange(nextX, nextY)) continue;
if (checkObstacle(nextX, nextY)) continue;
board[nextX][nextY] = 'X';
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N >> M;
char pin[3] = { 'Q', 'K', 'P' };
for (int i = 0; i < 3; i++) {
cin >> cnt;
setBoard(pin[i], cnt);
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
if (board[i][j] == 'Q')
moveQueen(i, j);
else if (board[i][j] == 'K')
moveKnight(i, j);
}
}
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
if (board[i][j] == 0)
answer++;
}
}
cout << answer;
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 2580 스도쿠 (0) | 2021.02.26 |
---|---|
[BOJ] 백준 1347 미로 만들기 (0) | 2021.02.26 |
[BOJ] 백준 1331 나이트 투어 (0) | 2021.02.26 |
[BOJ] 백준 1107 리모컨 (0) | 2021.02.26 |
[BOJ] 백준 3048 개미 (0) | 2021.02.26 |
댓글