programmers_혼자서 하는 틱택토_java
2023. 5. 24. 17:45ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/160585
실패 조건 :
1. O의 갯수 < X의 갯수
2. O의 갯수 - X의 갯수 > 1
3. 둘다 승리
4. O 승리 -> O의 갯수 != X의 갯수 +1
5. X 승리 -> X의 갯수 != O의 갯수
class Solution {
public int solution(String[] board) {
int answer = -1;
answer = game(board);
return answer;
}
public int game(String[] board){
int oCount = 0;
int xCount = 0;
int oRes = 0;
int xRes = 0;
for (String s : board){
int sLength = s.length();
for (int i = 0; i<sLength; i++){
if (s.charAt(i) == 'O'){
oCount++;
}else if (s.charAt(i) == 'X'){
xCount++;
}
}
}
// 후공이 더 많은 경우
if (oCount < xCount){
return 0;
}
// 비정상적인 차이를 보이는 경우
if (oCount - xCount > 1){
return 0;
}
// 한줄 완성한 경우
if (oCount >= 3){
oRes = isWin(board, 'O');
}
if (xCount >= 3){
xRes = isWin(board, 'X');
}
// o승리 -> oCount가 1개 더 많아야함
if (oRes >= 1 && oCount != xCount + 1){
return 0;
}
// x 승리 -> xCount == oCount
if (xRes >= 1 && oCount != xCount){
return 0;
}
// 둘다 승리인 경우
if (xRes >= 1 && oRes >= 1){
return 0;
}
return 1;
}
// 성공한 것 있는지 확인
public int isWin(String[] board, char pattern){
int winCount = 0;
boolean flag = true;
//가로 확인
for (int i = 0; i<3; i++){
flag = true;
for (int j = 0; j<3; j++){
if (board[i].charAt(j) != pattern){
flag = false;
break;
}
}
if (flag){
winCount++;
}
}
// 세로 확인
for (int j = 0; j<3; j++){
flag = true;
for (int i = 0; i<3; i++){
if (board[i].charAt(j) != pattern){
flag = false;
break;
}
}
if (flag){
winCount++;
}
}
// 대각 확인
flag = true;
for (int i = 0; i<3; i++){
if (board[i].charAt(i) != pattern){
flag = false;
break;
}
}
if (flag){
winCount++;
}
flag = true;
int tmp = 0;
for (int i = 2; i>=0; i--){
if (board[tmp++].charAt(i) != pattern){
flag = false;
break;
}
}
if (flag){
winCount++;
}
return winCount;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_이모티콘 할인행사_java (0) | 2023.05.25 |
---|---|
programmers_순위 검색_java (0) | 2023.05.25 |
programmers_숫자 블록_java (0) | 2023.05.22 |
programmers_두 원 사이의 정수 쌍_java (0) | 2023.05.21 |
programmers_리코쳇 로봇_java (0) | 2023.05.21 |