https://www.acmicpc.net/problem/7682
7682번: 틱택토
틱택토 게임은 두 명의 사람이 번갈아가며 말을 놓는 게임이다. 게임판은 3×3 격자판이며, 처음에는 비어 있다. 두 사람은 각각 X 또는 O 말을 번갈아가며 놓는데, 반드시 첫 번째 사람이 X를 놓고
www.acmicpc.net
풀이 방법
완전한 구현 문제이다. 게임이 끝나는 조건을 알아내고 입력으로 주어진 상태가 조건에 부합하는지 확인해주면 된다. x와 o는 번갈아 놓기 때문에 항상 x가 하나 더 많거나 개수가 같은 경우 두 가지뿐이므로 두 경우에 따라 게임이 끝나는 상태를 보면 아래와 같다.
- x가 하나 더 많은 경우 => x가 이기거나 무승부
- x가 먼저 3칸을 잇는 데 성공하고 o는 성공하지 못함, 더 이상 o를 놓지 않고 끝냄
- 게임판 9칸을 꽉 채울 때까지 승부가 나지 않은 경우, 즉 무승부
- x와 o의 개수가 같은 경우 => o가 이김
- o가 먼저 3칸을 잇는 데 성공하고 x는 성공하지 못함, 더 이상 x를 놓지 않고 끝냄
따라서, 먼저 x와 o의 개수를 카운트한 후 값을 비교하여 1번과 2번 각각 해당하는 경우에 따라 x가 성공했는지, o가 성공했는지를 확인해주면 된다. 위에서 주어진 조건 이외에는 모두 invalid 한 상태가 된다.
코드
import java.io.*;
public class Main {
static char[][] board = new char[3][3];
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String line = br.readLine();
if(line.equals("end")) {
break;
}
int x = 0; // x의 개수
int o = 0; // o의 개수
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
board[i][j] = line.charAt(j + i*3);
if(board[i][j] == 'X'){
x++;
} else if(board[i][j] == 'O'){
o++;
}
}
}
// x와 o의 개수가 같음 => o가 이겨야 함
if(x == o) {
if(!check('X') && check('O')) {
System.out.println("valid");
} else {
System.out.println("invalid");
}
// x가 o보다 하나 많은 경우 => x가 이기거나 무승부
} else if(x == o+1) {
if(check('X') && !check('O')){
System.out.println("valid");
} else if(x + o == 9 && !check('O')) { // 무승부
System.out.println("valid");
}else {
System.out.println("invalid");
}
} else {
System.out.println("invalid");
}
}
}
public static boolean check(char c) {
// 가로, 세로 빙고 확인
for(int i=0; i<3; i++) {
int rowCnt = 0;
int colCnt = 0;
for(int j=0; j<3; j++) {
if(board[i][j] == c) rowCnt++;
if(board[j][i] == c) colCnt++;
}
if(rowCnt == 3 || colCnt == 3) {
return true;
}
}
// 대각선 빙고 확인
if(board[0][0] == c && board[1][1] == c && board[2][2] == c) {
return true;
}
if(board[0][2] == c && board[1][1] == c && board[2][0] == c) {
return true;
}
return false;
}
}'알고리즘 > baekjoon' 카테고리의 다른 글
| 백준 17281 야구⚾ 자바(java) (0) | 2024.01.29 |
|---|---|
| 백준 12764 싸지방에 간 준하 자바(java) (0) | 2024.01.27 |
| 백준 17825 주사위 윷놀이 자바(java) (0) | 2024.01.24 |
| 백준 2174 로봇 시뮬레이션 자바(java) (1) | 2024.01.24 |
| 백준 23288 주사위 굴리기 2 자바(java) (0) | 2024.01.23 |