8 x 8 체스판에 정확히 룩 8개가 서로 공격할 수 없게 놓여 있는지 확인하는 문제이다.
체스판 정보를 받으면서 룩의 위치를 저장한다. 8개인지 확인하고 아니라면 조건을 만족하지 않게 된다.
List<int[]> rooks = new ArrayList<>();
for(int i=0; i<8; i++) {
board[i] = br.readLine().toCharArray();
for(int j=0; j<8; j++) {
if(board[i][j] == 'O') {
rooks.add(new int[] {i, j});
}
}
}
if(rooks.size() != 8) {
sb.append("no").append('\n');
continue;
}
공격 가능 여부는 가로 세로에 다른 룩이 존재하는지 확인하여 없으면 가능하고 하나라도 있으면 불가능하다.
private static boolean isValidRook(int[] rook) {
for(int i=1; i<8; i++) {
int nr = (rook[0]+i) % 8, nc = (rook[1]+i) % 8;
if(board[nr][rook[1]] == 'O') return false;
if(board[rook[0]][nc] == 'O') return false;
}
return true;
}
for(int[] rook: rooks) {
if(!isValidRook(rook)) {
sb.append("no").append('\n');
continue outer;
}
}
결과 코드는 다음과 같다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Solution {
static char[][] board = new char[8][8];;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
outer: for (int tc = 1; tc <= T; tc++) {
sb.append('#').append(tc).append(' ');
List<int[]> rooks = new ArrayList<>();
for(int i=0; i<8; i++) {
board[i] = br.readLine().toCharArray();
for(int j=0; j<8; j++) {
if(board[i][j] == 'O') {
rooks.add(new int[] {i, j});
}
}
}
if(rooks.size() != 8) {
sb.append("no").append('\n');
continue;
} else {
for(int[] rook: rooks) {
if(!isValidRook(rook)) {
sb.append("no").append('\n');
continue outer;
}
}
}
sb.append("yes").append('\n');
}
br.close();
System.out.print(sb);
}
private static boolean isValidRook(int[] rook) {
for(int i=1; i<8; i++) {
int nr = (rook[0]+i) % 8, nc = (rook[1]+i) % 8;
if(board[nr][rook[1]] == 'O') return false;
if(board[rook[0]][nc] == 'O') return false;
}
return true;
}
}'알고리즘(백준 등) 공부' 카테고리의 다른 글
| SWEA 14692. 통나무 자르기 (0) | 2026.05.10 |
|---|---|
| SWEA 15230. 알파벳 공부 (0) | 2026.05.09 |
| SWEA 15758. 무한 문자열 (0) | 2026.05.07 |
| SWEA 15942. 외계인 침공 (0) | 2026.05.06 |
| SWEA 16002. 합성수 방정식 (0) | 2026.05.05 |