프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
일단 여기서 틱택토가 정상적으로 진행되지 않는 경우는
- 턴이 제대로 주어지지 않음(cntX > cntO or cntO > cntX + 1) 즉, 한 쪽이 한 번 이상 더 많이 둠
- O가 승리했는데 cntO - cntX가 1이 아님
- X가 승리했는데 cntO == cntX가 아님
- 둘 다 승리함 < 이거를 고려안하고 작성하다가 중간에 whoWin 메서드를 고침
이렇게 4가지다
위 조건을 모두 통과하면 정상적으로 틱택토가 진행된 것
#include <string>
#include <vector>
using namespace std;
// 누가 이겼는가
bool whoWin(vector<string> board, char target) {
// 가로 세로 체크
for(int i = 0; i < 3; i++) {
if(board[i][0] == target && board[i][0] == board[i][1] && board[i][1] == board[i][2])
return true;
if(board[0][i] == target && board[0][i] == board[1][i] && board[1][i] == board[2][i])
return true;
}
// 대각선 체크
if(board[0][0] == target && board[0][0] == board[1][1] && board[1][1] == board[2][2])
return true;
if(board[2][0] == target && board[2][0] == board[1][1] && board[1][1] == board[0][2])
return true;
return false;
}
int solution(vector<string> board) {
int cntO = 0, cntX = 0;
// O와 X 수 세기
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++) {
if(board[i][j] == 'O') cntO++;
if(board[i][j] == 'X') cntX++;
}
// 공평한 턴이 주어졌는가
if((cntO < cntX) || (cntO > cntX + 1)) return 0;
// O가 이겼는데 X가 수를 뒀는가
if(whoWin(board, 'O') && cntO - cntX != 1) return 0;
// X가 이겼는데 O가 수를 뒀는가
if(whoWin(board, 'X') && cntO - cntX != 0) return 0;
// O, X 둘 다 이겼는가
if(whoWin(board, 'O') && whoWin(board, 'X')) return 0;
return 1;
}
'프로그래머스 > 2레벨' 카테고리의 다른 글
[프로그래머스/C++] 순위 검색 (0) | 2024.03.14 |
---|---|
[프로그래머스/C++] 택배 배달과 수거하기 (0) | 2024.03.12 |
[프로그래머스/C++] 단체사진 찍기 (0) | 2024.03.12 |
[프로그래머스/C++] 당구 연습 (0) | 2024.03.12 |
[프로그래머스/C++] 두 원 사이의 정수 쌍 (0) | 2024.03.12 |