https://www.acmicpc.net/problem/15671
풀이
익히 알고있던 오델로 게임을 시뮬레이션하는 문제였다.
예를 들어 BWWW
와 같은 줄이 있을 때 오른쪽 끝에 B를 위치한다면 BWWWB
처럼 검정 돌이 흰 돌을 감싸 잡아먹게된다. 둘러쌓인 흰 돌이 검정색으로 바뀌게 되고 BBBBB
가 된다.
검정 돌부터 시작하여 돌을 놓는 좌표가 주어지는데, 돌을 놓을 때 대각선까지 팔방탐색하여 처음 검정 돌을 만나면 이전의 흰 돌들을 검정색으로 바꾸고, 빈칸을 만난다면 패스한다.
최종 보드판의 상태와 검정, 흰 돌중 어느 돌이 많아 승리하는지 구하면 된다.
메모리: 14304KB
시간: 104ms
언어: Java 11
import java.io.*;
import java.util.*;
public class Main {
static char[][] board;
static int[][] vector = { { 1, 0 }, { -1, 0 }, { 0, 1 }, { 0, -1 }, { 1, 1 }, { 1, -1 }, { -1, 1 }, { -1, -1 } };
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[][] logs = new int[n][2];
StringTokenizer st;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
logs[i][0] = Integer.parseInt(st.nextToken());
logs[i][1] = Integer.parseInt(st.nextToken());
}
board = new char[7][7];
for (int i = 1; i < 7; i++) {
for (int j = 1; j < 7; j++) {
board[i][j] = '.';
}
}
board[3][3] = 'W';
board[4][4] = 'W';
board[3][4] = 'B';
board[4][3] = 'B';
for (int i = 0; i < n; i++) {
int r = logs[i][0];
int c = logs[i][1];
putStone(r, c, i);
}
int black = 0;
int white = 0;
for (int i = 1; i < 7; i++) {
for (int j = 1; j < 7; j++) {
System.out.print(board[i][j]);
if (board[i][j] == 'B') {
black++;
} else if (board[i][j] == 'W') {
white++;
}
}
System.out.println();
}
System.out.println(black > white ? "Black" : "White");
}
private static void putStone(int r, int c, int turn) {
if (turn % 2 == 0) {
board[r][c] = 'B';
} else {
board[r][c] = 'W';
}
loop: for (int k = 0; k < 8; k++) {
ArrayList<int[]> toBeChanged = new ArrayList<>();
int nr = r;
int nc = c;
while (true) {
nr += vector[k][0];
nc += vector[k][1];
if (nr < 1 || nc < 1 || nr > 6 || nc > 6) {
continue loop;
}
if (board[nr][nc] == board[r][c]) {
break;
} else if (board[nr][nc] == '.') {
continue loop;
} else {
toBeChanged.add(new int[] { nr, nc });
}
}
for (int[] spot : toBeChanged) {
board[spot[0]][spot[1]] = board[r][c];
}
}
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준]31997: 즐거운 회의 - JAVA (1) | 2024.09.02 |
---|---|
[백준] 22352: 항체 인식 - JAVA (0) | 2024.08.19 |
[백준] 10881: 프로도의 선물 포장 - JAVA (0) | 2024.08.13 |
[백준] 20208: 진우의 민트초코우유 - JAVA (0) | 2024.07.19 |
[백준] 20917: 사회적 거리 두기 (0) | 2024.07.18 |
[백준] 17845: 수강 과목 - JAVA (0) | 2024.07.18 |