반응형
https://leetcode.com/problems/find-winner-on-a-tic-tac-toe-game/description/
간단 구현 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
moves에 따른 결과를 확인하기 위한 vector board를 선언 후 moves의 원소를 순회하며 값을 조건에 맞게 채워줍니다.
📔 풀이과정
4방향을 검사해 승자를 가려야 합니다.
loop를 수행하며 다음 방향으로 연속 3개의 같은 문자가 나왔는지 확인해 줍니다.
|, ㅡ, /, \
* game이 진행중이면 board에 값이 모두 차지 않았으므로 Pending을 반환해주면 됩니다.
📕 Code
📔 C++
class Solution {
public:
string tictactoe(vector<vector<int>>& moves) {
vector <vector<char>> board(3, vector<char>(3));
for(int i = 0; i < moves.size(); i++) {
if(i % 2 == 0) board[moves[i][0]][moves[i][1]] = 'X';
else board[moves[i][0]][moves[i][1]] = 'O';
}
int xCnt = 0, oCnt = 0;
// ㅡ, | 검사
for(int i = 0; i < 3; i++) {
xCnt = 0, oCnt = 0;
for(int j = 0; j < 3; j++) {
if(board[i][j] == 'X') xCnt++;
else if(board[i][j] == 'O') oCnt++;
if(xCnt == 3 && oCnt == 3) return "Draw";
if(xCnt == 3) return "A";
if(oCnt == 3) return "B";
}
xCnt = 0, oCnt = 0;
for(int j = 0; j < 3; j++) {
if(board[j][i] == 'X') xCnt++;
else if(board[j][i] == 'O') oCnt++;
if(xCnt == 3 && oCnt == 3) return "Draw";
if(xCnt == 3) return "A";
if(oCnt == 3) return "B";
}
}
// '\' 검사
xCnt = 0, oCnt = 0;
for(int i = 0; i < 3; i++) {
if(board[i][i] == 'X') xCnt++;
else if(board[i][i] == 'O') oCnt++;
if(xCnt == 3) return "A";
if(oCnt == 3) return "B";
}
// '/' 검사
xCnt = 0, oCnt = 0;
for(int i = 0; i < 3; i++) {
if(board[i][2-i] == 'X') xCnt++;
else if(board[i][2-i] == 'O') oCnt++;
if(xCnt == 3) return "A";
if(oCnt == 3) return "B";
}
return moves.size() == 9 ? "Draw" : "Pending";
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.