728x90
반응형
🔗 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
반응형
728x90
👩💻 코드
#include <string>
#include <vector>
using namespace std;
bool checkWin(const vector<string>& board, char player) {
for (int i = 0; i < 3; ++i) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player)
return true;
}
for (int i = 0; i < 3; ++i) {
if (board[0][i] == player && board[1][i] == player && board[2][i] == player)
return true;
}
if (board[0][0] == player && board[1][1] == player && board[2][2] == player){
return true;
}
if (board[0][2] == player && board[1][1] == player && board[2][0] == player){
return true;
}
return false;
}
int solution(vector<string> board) {
int oCount = 0;
int xCount = 0;
for (const string& row : board) {
for (char cell : row) {
if (cell == 'O') {
oCount++;
}
if (cell == 'X'){
xCount++;
}
}
}
if (oCount != xCount && oCount != xCount + 1) {
return 0;
}
bool oWin = checkWin(board, 'O');
bool xWin = checkWin(board, 'X');
if (oWin && xWin) {
return 0;
}
if (oWin && oCount != xCount + 1) {
return 0;
}
if (xWin && oCount != xCount) {
return 0;
}
return 1;
}
📝 풀이
먼저 board에 있는 'O'와 'X'의 개수를 세줍니다.
선공과 후공을 올바른 순서대로 표시했으면 O의 개수가 X의 개수와 같거나 하나 더 많아야 합니다.
이 경우에 해당하지 않으면 0을 return 합니다.
승리된 경우가 있는지 확인하는 함수 checkWin을 구현합니다.
가로 3줄과 세로 3줄, 대각선 2줄의 문자를 각각 확인하여 승리 여부를 판단합니다.
둘 다 게임을 승리하는 경우는 규칙을 어긴 것이기 때문에 0을 return 합니다.
선공이 이긴경우 X의 개수보다 1개 많아야만 하기때문에 해당하지 않으면 0을 return 합니다.
후공이 이긴경우 O의 개수와 같아야 하기때문에 해당하지 않으면 0을 return 합니다.
규칙의 어기는 경우의 수를 모두 통과했다면 진행하여 나올 수 있는 게임 상황이므로 1을 return 합니다.
728x90
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 정수 삼각형 (0) | 2024.10.24 |
---|---|
[프로그래머스] N으로 표현 (0) | 2024.10.24 |
[프로그래머스] 이모티콘 할인행사 (1) | 2024.10.21 |
[프로그래머스] N-Queen (0) | 2024.10.21 |
[프로그래머스] 두 원 사이의 정수 쌍 (0) | 2024.10.18 |