-
룩을 피해라(Rook.cpp)
문제
체스에서 룩이라는 기물은 상, 하, 좌, 우 방향으로 막혀있지만 않으면 움직일 수 있다.
체스는 킹만 잡히면 지게 되는 게임이다. 그 중에서도 알랩이는 룩으로 인해 게임을 지는 것을 극도로 싫어한다!
현재 체스판의 상태가 주어져 있고, 다음 차례가 상대의 차례일 때, 킹이 룩에게 잡힐 가능성이 있는지 알아보자
입력
8줄에 걸쳐 8x8 체스판의 상태가 주어진다. 이때 0은 기물이 없는 상태이고, 1은 알랩이의 킹을 의미하고, 2는 상대의 룩을 의미하며 3은 그 외 다른 기물들을 의미한다. (킹은 하나만 존재하며, 상대의 룩은 최대 2개까지 있을 수 있다. 그 외 기물들은 최대 29개까지 있을 수 있다.)
출력
킹이 룩에게 잡힐 가능성이 있으면 1, 아니면 0을 출력한다.
예제 입력
0 3 0 0 0 0 0 0 3 1 0 0 0 0 2 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
예제 출력
1
import java.util.Scanner;
public class Rook {
/**
* 체스는 킹만 잡히면 지게 되는 게임이다. 그 중에서도 알랩이는 룩으로 인해 게임을 지는 것을 극도로 싫어한다!
*
* 현재 체스판의 상태가 주어져 있고, 다음 차례가 상대의 차례일 때, 킹이 룩에게 잡힐 가능성이 있는지 알아보자
*
* 8줄에 걸쳐 8x8 체스판의 상태가 주어진다.
* 이때 0은 기물이 없는 상태이고,
* 1은 알랩이의 킹을 의미하고,
* 2는 상대의 룩을 의미하며
* 3은 그 외 다른 기물들을 의미한다.
* (킹은 하나만 존재하며, 상대의 룩은 최대 2개까지 있을 수 있다. 그 외 기물들은 최대 29개까지 있을 수 있다.)
*
* 킹이 룩에게 잡힐 가능성이 있으면 1, 아니면 0을 출력한다.
*
* @param args
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] chessBoard = new int[8][8];
int kingPosRow = 0, kingPosCol = 0, rookPosRow=0, rookPosCol =0;
for (int i=0; i<chessBoard.length; i++){
for (int j=0; j<chessBoard[0].length; j++){
chessBoard[i][j] = sc.nextInt();
if (chessBoard[i][j] == 1){
kingPosRow = i;
kingPosCol = j;
} else if (chessBoard[i][j] == 2){
rookPosRow = i;
rookPosCol = j;
}
}
}
//check that row
if (kingPosRow == rookPosRow){
//need to check if there's anything in between.
int smallerCol = kingPosCol > rookPosCol? rookPosCol : kingPosCol;
int largerCol = kingPosCol > rookPosCol? kingPosCol : rookPosCol;
boolean isAllClear = true;
for (int i=smallerCol; i<= largerCol; i++){
isAllClear &= chessBoard[kingPosRow][i] != 3;
}
if (isAllClear) {
System.out.println(1);
return;
}
}
//check cols
if (kingPosCol == rookPosCol){
//need to check if there's anything in between.
int smallerRow = kingPosRow > rookPosRow? rookPosRow : kingPosRow;
int largerRow = kingPosRow > rookPosRow? kingPosRow : rookPosRow;
boolean isAllClear = true;
for (int i=smallerRow; i<= largerRow; i++){
isAllClear &= chessBoard[i][kingPosCol] != 3;
}
if (isAllClear) {
System.out.println(1);
return;
}
}
//cant take.
System.out.println( 0);
}
}'Basic' 카테고리의 다른 글
2-6: 색종이 (0) 2018.10.24 2-5: 사거리 (0) 2018.10.24 2-3: 뒤집게 게임2 (0) 2018.10.24 2-2: 뒤집기 게임 (0) 2018.10.24 2-1: maxofarr (0) 2018.10.24