숫자 야구 게임에 대한 N번의 질의와 그에 대한 답이 주어졌을 때, 모든 가능한 정답의 수를 구해야한다.
예전에 풀었던 문제였는데, 참여 중인 스터디에서 문제를 올리셔서 재차 풀어봤습니다.
기본적으로 세자리 수는 어차피 몇 개 되지 않기 때문에 브루트포스 알고리즘으로 접근하면 됩니다. bool 배열을 만들어 두고, N번 반복하면서 모든 질의와 그에 대한 답을 확인하는 절차를 구현하고 bool 배열에 값을 초기화시켜주면 됩니다.
#include <bits/stdc++.h>
using namespace std;
bool flag[1000];
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
while (n--)
{
int num, strike, ball;
cin >> num >> strike >> ball;
for (int i = 123; i <= 987; i++)
{
if (flag[i])
continue;
string str = to_string(i);
if ((str[0] == '0' || str[1] == '0' || str[2] == '0')
|| (str[0] == str[1] || str[1] == str[2] || str[0] == str[2]))
{
flag[i] = true;
continue;
}
int s = 0, b = 0;
string tmp = to_string(num);
for (int j = 0; j < 3; j++)
{
for (int k = 0; k < 3; k++)
{
if (str[j] == tmp[k])
{
if (j == k)
s++;
else
b++;
}
}
}
flag[i] = (strike == s && ball == b ? false : true);
}
}
int cnt = 0;
for (int i = 123; i <= 987; i++)
if (!flag[i])
cnt++;
cout << cnt;
return 0;
}