Coding Test/프로그래머스
[프로그래머스] 혼자서 하는 틱택토
lsh2613
2023. 8. 3. 21:14
https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
틱택토 조건
- 둘 다 이기는 경우 존재X
- O가 승리했을 경우 O갯수가 X갯수보다 하나 큼
- X가 승리했을 경우 O와 X의 갯수가 동일해야 함
- 아무도 승리하지 못했을 경우 o가 x랑 같거나 하나 더 큼
위 조건을 체크하기 위해 O와 X의 개수, 해당 틱택토에서 O와 X의 승리 여부를 구한다.
코드
class Solution {
public int solution(String[] board) {
int answer = -1;
int o = 0;
int x= 0;
for(int i=0; i<board.length; i++){
for(int j=0; j<board[i].length();j++){
if(board[i].charAt(j)=='O')
o++;
if(board[i].charAt(j)=='X')
x++;
}
}
boolean oWin = isWin(board, 'O');
boolean xWin = isWin(board, 'X');
// 둘 다 이기는 경우 존재X
if(oWin && xWin) answer = 0;
// O가 승리했을 경우 O갯수가 X갯수보다 하나 큼
else if(oWin && !xWin){
if(o==x+1) answer = 1;
else answer = 0;
}
// X가 승리했을 경우 O와 X의 갯수가 동일해야 함
else if(!oWin && xWin){
if(o==x) answer = 1;
else answer = 0;
}
// 아무도 승리하지 못했을 경우 o가 x랑 같거나 하나 더 큼
else if(!oWin && !xWin){
if (o==x || o==x+1) answer = 1;
else answer = 0;
}
return answer;
}
static boolean isWin(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)
|| (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)
|| (board[0].charAt(2)==c)&&(board[1].charAt(1)==c)&&(board[2].charAt(0)==c))
return true;
return false;
}
}