문제 유형을 뭐라고 해야 할 지 모르겠습니다.
틱택토 게임판이 주어집니다.(틱택토 룰
은 상단 소제목, 또는 링크를 눌러 참고하시기 바랍니다) 게임의 룰
을 지키며 진행했을 때 나올 수 있는 판인지 없는 판인지 판별하는 문제입니다.
나올 수 없는 판의 종류는 다음과 같습니다. 가운데 정렬이 안 된 점 양해 부탁드립니다.
벨로그 표 가운데 정렬 방법 아시는 분 공유 부탁드립니다!
o | o | |
---|---|---|
x | ||
x | x |
o | o | |
---|---|---|
o | ||
x |
o | o | o |
---|---|---|
x | ||
x | x |
o | o | o |
---|---|---|
o | x | |
x | x | x |
x | x | x |
---|---|---|
o | o | |
o | o |
o | o | o |
---|---|---|
o | o | x |
x | x | x |
게임판 크기가 3x3으로 제한되어 있기 때문에 모든 경우가 이 3가지 안에 들어갑니다. containLine
이라는 함수를 하드코딩(?)하여 승리여부를 판별했습니다.
class Solution {
public int solution(String[] board) {
int o = 0;
int x = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i].substring(j, j + 1).equals("O")) {
o++;
}
if (board[i].substring(j, j + 1).equals("X")) {
x++;
}
}
}
if (x > o || o - x > 1) {
return 0;
}
if (o == x && containLine(board, "O")) {
return 0;
}
if (containLine(board, "X") && o == x + 1) {
return 0;
}
return 1;
}
public boolean containLine(String[] board, String s) {
if (board[0].substring(0, 1).equals(s)
&& board[1].substring(1, 2).equals(s)
&& board[2].substring(2, 3).equals(s)) {
return true;
}
if (board[2].substring(0, 1).equals(s)
&& board[1].substring(1, 2).equals(s)
&& board[0].substring(2, 3).equals(s)) {
return true;
}
for (int i = 0; i < 3; i++) {
if (board[i].substring(0, 1).equals(s)
&& board[i].substring(1, 2).equals(s)
&& board[i].substring(2, 3).equals(s)) {
return true;
}
if (board[0].substring(i, i + 1).equals(s)
&& board[1].substring(i, i + 1).equals(s)
&& board[2].substring(i, i + 1).equals(s)) {
return true;
}
}
return false;
}
}