https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
#include <string>
#include <vector>
#include<iostream>
using namespace std;
//입출력 예
//return 0
// X갯수 >= O 인 경우
// O와 X갯수가 같은 상황에서 O가 3개를 완성한 경우
//나머지는 return 1
int solution(vector<string> board) {
int oCnt = 0;
int xCnt = 0;
for(int y = 0; y < board.size(); ++y){
for(int x = 0; x < board[y].size(); ++x){
if(board[y][x] == 'O')
{
oCnt++;
}
if(board[y][x] == 'X'){
xCnt++;
}
}
}
//O 표시해야하나 X 표시한 경우
if(xCnt>oCnt)return 0;
//X 표시해야하나 O 표시한 경우
if(xCnt+2 <=oCnt) return 0; //선공 차이가 최대 1회인데 2회 이상인 경우
//선공이나 후공이 승리했지만 게임을 진행한 경우
//1. 선공이 승리했음에도 게임이 진행된 경우
if(xCnt==oCnt){
//가로 r is row
for(int r = 0; r < board.size(); ++r){
if(board[r][0] == 'O' && board[r][1] == 'O' && board[r][2] == 'O') return 0;
}
//세로 c is col
for(int c = 0; c < board[c].size(); ++c){
if(board[0][c] == 'O' && board[1][c] == 'O' && board[2][c] == 'O') return 0;
}
//대각선
if(board[0][0] == 'O' && board[1][1] == 'O' && board[2][2] == 'O') return 0;
if(board[2][0] == 'O' && board[1][1] == 'O' && board[0][2] == 'O') return 0;
}
//2. 후공이 승리했음에도 게임이 진행한 경우
if(oCnt==xCnt+1){
//가로 r is row
for(int r = 0; r < board.size(); ++r){
if(board[r][0] == 'X' && board[r][1] == 'X' && board[r][2] == 'X') return 0;
}
//세로 c is col
for(int c = 0; c < board.size(); ++c){
if(board[0][c] == 'X' && board[1][c] == 'X' && board[2][c] == 'X') return 0;
}
//대각선
if(board[0][0] == 'X' && board[1][1] == 'X' && board[2][2] == 'X') return 0;
if(board[2][0] == 'X' && board[1][1] == 'X' && board[0][2] == 'X') return 0;
}
return 1;
}'프로그래머스 > 코딩테스트' 카테고리의 다른 글
| lv1) 중요한 단어를 스포 방지 [정답률 가장 낮은 문제] (0) | 2026.08.05 |
|---|---|
| lv3) 입국심사 [다시] (0) | 2026.07.19 |
| lv3) 여행경로 (BFS로 풀어보기) (0) | 2026.07.16 |
| lv2) 비밀코드 해독 (0) | 2026.07.09 |
| lv2) 짝지어 제거하기 c++로 lv5 정도 될 듯 하다. (0) | 2026.07.08 |
