https://school.programmers.co.kr/learn/courses/30/lessons/160585
문제 : 틱택토에서 실수를 했던, 안했던 그 결과가 규칙에 맞는지 아닌지 판단하기
해결 방법 :
1. 9칸짜리 보드에서 'O'의 개수, 'X'의 개수, '.'의 개수 검사
2. 9칸짜리 보드에서 가로/세로/대각선으로 "OOO", "XXX"인지 검사
3. 선공인 'O'가 이겼을 때와 후공인 'X'가 이겼을 때로 구분
4.예외로 빈칸이 9개일 때는 규칙에 맞고 굳이 다 검사할 필요 없어서 바로 리턴
class Solution {
public int solution(String[] board) {
int answer = -1;
int onum = 0, xnum = 0, empty = 0;
boolean owin = false, xwin = false;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(board[i].charAt(j) =='O'){
onum++;
}else if(board[i].charAt(j) =='X'){
xnum++;
}else{
empty++;
}
}
}
if(empty == 9){
answer = 1;
return answer;
}
// 가로 세로 승자 확인
for(int i=0;i<3;i++){
if(board[i].equals("OOO")){
owin = true;
}
if(board[0].charAt(i) == 'O' && board[1].charAt(i) == 'O'){
if(board[2].charAt(i) == 'O'){
owin = true;
}
}
if(board[i].equals("XXX")){
xwin = true;
}
if(board[0].charAt(i) == 'X' && board[1].charAt(i) == 'X'){
if(board[2].charAt(i) == 'X'){
xwin = true;
System.out.println("is");
}
}
}
//대각선 승자 확인
if(board[0].charAt(0) == 'O' && board[1].charAt(1) == 'O'){
if(board[2].charAt(2) == 'O'){
owin = true;
}
}
if(board[0].charAt(2) == 'O' && board[1].charAt(1) == 'O'){
if(board[2].charAt(0) == 'O'){
owin = true;
}
}
if(board[0].charAt(0) == 'X' && board[1].charAt(1) == 'X'){
if(board[2].charAt(2) == 'X'){
xwin = true;
}
}
if(board[0].charAt(2) == 'X' && board[1].charAt(1) == 'X'){
if(board[2].charAt(0) == 'X'){
xwin = true;
}
}
if(owin == true && xwin == true){
answer = 0;
} else if(owin == true && xwin == false){
if(onum - xnum == 1){
answer = 1;
}else{
answer = 0;
}
} else if(owin == false && xwin == true){
if(onum - xnum == 0){
answer = 1;
} else {
answer = 0;
}
} else{
if(onum - xnum == 0 || onum - xnum == 1){
answer = 1;
} else{
answer = 0;
}
}
return answer;
}
}
if(board[i].charAt(0) == 'O' && board[i].charAt(0) == 'O'){
if(board[i].charAt(2) == 'O'){
owin = true;
}
}