결론: 0과 중복 수를 허용하지 않는 숫자 게임에서 가능성 있는 답의 개수를 구하라.
📌 123~987 사이의 숫자를 담은 배열에 0과 중복을 제외하도록 답안지를 미리 만들어 둔다.
#include <bits/stdc++.h>
using namespace std;
int n, num, str, ball;
bool ans[1001];
string temp, compare1, compare2;
int s_cnt, b_cnt, cnt = 0;
int main(){
cin >> n;
memset(ans, true, sizeof(ans));
for(int i = 123; i <= 987; i++){
temp = to_string(i);
if(temp[0] == temp[1] || temp[1] == temp[2] || temp[0] == temp[2]) ans[i] = false;
if(temp[0] - '0' == 0 || temp[1] - '0' == 0 || temp[2] - '0' == 0) ans[i] = false;
}
for(int i = 1; i <= n; i++){
cin >> num >> str >> ball;
for(int i = 123; i <= 987; i++){
s_cnt = 0;
b_cnt = 0;
if(ans[i]){
compare1 = to_string(num);
compare2 = to_string(i);
for(int a = 0; a < 3; a++){
for(int b = 0; b < 3; b++){
if(a == b && compare1[a] == compare2[b]) s_cnt++;
if(a != b && compare1[a] == compare2[b]) b_cnt++;
}
}
if(s_cnt != str || b_cnt != ball) ans[i] = false;
}
}
}
for(int i = 123; i <= 987; i++) {
if(ans[i]) cnt++;
}
cout << cnt;
return 0;
}
(사담)
브루트포스에 유독 약한 것 같다.
그냥 인간의 머리로는 당연히 이렇게 하면 답인데? 싶은 것들을 코드로 하나하나 구현하자니 빼먹는 경우의 수도 너무 많고... 😇
꽥.