문제

풀이
- 틱택토가 불가능한 상황을 고려하여 풀이한다.
- x의 개수가 o의 개수보다 많다
- x의 개수와 o의 개수 차이가 2이상일 때
- 승리한 사람이 두 명
- X가 승리하였는데 O와 X의 개수가 다른 경우
- O가 승리하였는데 O의 개수가 X의 개수보다 1크지 않은 경우
유의할 점
- 아무리 많은 경우를 고려해봐도 통과하지 못하는 테스트 케이스가 있어서 마지막으로 틱택토에서 승자가 나오는 경우를 구현한 함수를 수정하였는데 통과했다. 불필요하게 for문을 쓰다 보니 원하는 결과가 나오지 않았다. 단순하게 구현할 수 있다면 길어지더라도 단순하게 코드를 작성해야겠다.
코드
import java.util.*;
class Solution {
public int solution(String[] board) {
int countO = 0;
int countX= 0;
for(int i=0; i<board.length; i++)
{
for(int j=0; j<board[0].length(); j++){
if(board[i].charAt(j)=='O') countO++;
else if(board[i].charAt(j)=='X') countX++;
}
}
if(countO<countX|| Math.abs(countO-countX)>=2) return 0;
else if (isFinished(board,'O') && isFinished(board,'X')) return 0;
else if (isFinished(board,'X')&& !(countO==countX)) return 0;
else if (isFinished(board,'O') && !(countO== countX+1)) return 0;
return 1;
}
boolean isFinished(String[] board, char c){
for(int i=0; i<3; i++)
if(board[i].charAt(0) == c && board[i].charAt(1) == c && board[i].charAt(2) == c) return true;
for(int i=0; i<3; i++)
if(board[0].charAt(i) == c && board[1].charAt(i) == c && board[2].charAt(i) == c) return true;
if(board[0].charAt(0) == c && board[1].charAt(1) == c && board[2].charAt(2) == c) return true;
if(board[2].charAt(0) == c && board[1].charAt(1) == c && board[0].charAt(2) == c) return true;
return false;
}
}