※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 7682번 문제인 틱택토이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/7682 

 

7682번: 틱택토

틱택토 게임은 두 명의 사람이 번갈아가며 말을 놓는 게임이다. 게임판은 3×3 격자판이며, 처음에는 비어 있다. 두 사람은 각각 X 또는 O 말을 번갈아가며 놓는데, 반드시 첫 번째 사람이 X를 놓고

www.acmicpc.net

각 칸의 상태는 ".", "O", "X"의 세 가지 상태가 가능하므로 살펴보아야 할 틱택토의 경우의 수는 많아야 3^9 = 19683가지가 된다. 따라서, 직접 틱택토 게임을 시뮬레이션을 돌려 가능한 최종상태들을 집합으로 전처리하고 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <string>
#include <set>
using namespace std;

set<string> valid_game;

bool finished(string& s) {
	if (s[0] != '.' && s[0] == s[1] && s[1] == s[2]) return 1;
	if (s[3] != '.' && s[3] == s[4] && s[4] == s[5]) return 1;
	if (s[6] != '.' && s[6] == s[7] && s[7] == s[8]) return 1;
	if (s[0] != '.' && s[0] == s[3] && s[3] == s[6]) return 1;
	if (s[1] != '.' && s[1] == s[4] && s[4] == s[7]) return 1;
	if (s[2] != '.' && s[2] == s[5] && s[5] == s[8]) return 1;
	if (s[0] != '.' && s[0] == s[4] && s[4] == s[8]) return 1;
	if (s[2] != '.' && s[2] == s[4] && s[4] == s[6]) return 1;

	return 0;
}

void func(string& s, int turn) {
	if (valid_game.find(s) != valid_game.end()) return;
	if (finished(s)) {
		valid_game.insert(s);
		return;
	}
	bool chk = 1;
	if (turn == 0) {
		for (int i = 0; i < 9; i++) {
			if (s[i] == '.') {
				string ss = s; ss[i] = 'X';
				func(ss, 1);
				chk = 0;
			}
		}
	}
	else {
		for (int i = 0; i < 9; i++) {
			if (s[i] == '.') {
				string ss = s; ss[i] = 'O';
				func(ss, 0);
				chk = 0;
			}
		}
	}

	if (chk) valid_game.insert(s);
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	string tmp = ".........";
	func(tmp, 0);
	
	cin >> tmp;
	while (tmp != "end") {
		if (valid_game.find(tmp) == valid_game.end()) cout << "invalid\n";
		else cout << "valid\n";
		cin >> tmp;
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 11295 // C++] Exercising  (0) 2023.01.05
[BOJ 5940 // C++] Math Practice  (0) 2023.01.04
[BOJ 5939 // C++] Race Results  (0) 2023.01.04
[BOJ 27101 // C++] Metric Matrices  (0) 2023.01.04
[BOJ 5938 // C++] Daisy Chains in the Field  (0) 2023.01.04

+ Recent posts