Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 최소스패닝트리
- solved.ac골드
- 과제진행하기
- 5강클로저
- 타겟넘버
- JS스터디
- 코어자바스크립트
- 백준 알고리즘
- 이중지도
- 지도 여러개
- solved.ac플래티넘
- Lv2
- 두원사이의정수쌍
- React.StrictMode
- 비트마스크
- c++
- [pccp 기출문제]
- pccp기출문제
- 알고리즘 문제풀이
- div2개
- 백준알고리즘
- 프로그래머스
- 알고리즘문제풀이
- 정렬
- 우박수열정적분
- 스택
- Lv3
- JS
- DP
- 2023카카오블라인드코테
Archives
- Today
- Total
호지
[프로그래머스] 혼자서 하는 틱택토 c++ 본문
이 문제는 경우의 수만 잘 설정하면 풀 수 있는 문제였다.
틱택토는 O가 선공이고, X가 후공일 때 가능한 경우의 수인지만 확인하면 된다.
따라서 보드 위의 O의 개수가 X와 같거나 O가 X보다 1개 많아야 한다.
또한 줄을 완성했으면 게임이 끝나는 경우이므로, 생각해봐야할 경우의 수는 다음과 같다.
1. X와 O 둘다 줄을 완성한 경우
- O나 X 둘 중 하나가 줄을 완성했다면 게임이 끝났어야 함
2. O가 줄을 완성했는데 보드 위의 O의 개수와 X의 개수가 동일한 경우
- O가 선공이므로 O가 줄을 완성해서 게임이 끝났을 때는 항상 O의 개수가 1개 더 많아야 함
3. X가 줄을 완성했는데 보드 위의 O의 개수가 X보다 1개 더 많은 경우
- X가 후공이므로 X가 줄을 완성해서 게임이 끝났을 때는 항상 O와 X의 개수가 같아야 함
다음과 같은 조건을 고려해서 코드를 구현하면 다음과 같다
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<string> board) {
int answer = -1;
int cntO = 0, cntX = 0;
for(int i=0; i<3; i++){
for(int j=0; j<3; j++){
if(board[i][j] == 'O')
cntO++;
else if(board[i][j] == 'X')
cntX++;
}
}
if(cntO != cntX && cntO != cntX + 1)
return 0;
int winO = 0, winX = 0;
for(int i=0; i<3; i++){
if(board[i][0] == board[i][1] && board[i][0] == board[i][2]){
if(board[i][0] == 'O')
winO++;
else if(board[i][0] == 'X')
winX++;
}
if(board[0][i] == board[1][i] && board[0][i] == board[2][i]){
if(board[0][i] == 'O')
winO++;
else if(board[0][i] == 'X')
winX++;
}
}
if(board[0][0] == board[1][1] && board[0][0] == board[2][2]){
if(board[0][0] == 'O')
winO++;
else if(board[0][0] == 'X')
winX++;
}
if(board[0][2] == board[1][1] && board[0][2] == board[2][0]){
if(board[0][2] == 'O')
winO++;
else if(board[0][2] == 'X')
winX++;
}
if(winX !=0 && winO != 0)
return 0;
if(winO != 0 && cntO == cntX)
return 0;
if(winX != 0 && cntO == cntX + 1)
return 0;
return 1;
}
https://school.programmers.co.kr/learn/courses/30/lessons/160585#
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 달리기 경주 문제풀이 JS (0) | 2023.07.19 |
---|---|
[프로그래머스] 미로 탈출 문제 풀이 c++ (0) | 2023.05.04 |
[프로그래머스] 미로 탈출 명령어 c++ (0) | 2023.04.14 |
[프로그래머스] 표 병합 c++ (0) | 2023.04.06 |
[프로그래머스] 표현 가능한 이진트리 c++ (0) | 2023.04.04 |
Comments