하루 1문제 챌린지/Silver3

백준 2503번 숫자야구 (C++)

그린푸딩 2024. 2. 12. 16:03
728x90
반응형
#include <iostream>
#include <vector>
#include<map>
#include<string>
using namespace std;

struct info {
	int n;
	int s;
	int b;
};

vector<info>arr;

bool cal(int a) { //두 수 스트라이크 볼 계산 

	string s = to_string(a);

	bool flag = true;
	for (int i = 0; i < arr.size(); i++) {

		string num =to_string(arr[i].n);

		int cal_strike = 0;
		int cal_ball = 0;

		for (int j = 0; j < 3; j++) {
			for (int k = 0; k < 3; k++) {
				if (s[j] == num[k]) {
					if (j == k) {
						cal_strike++; 
					}
					else {
						cal_ball++;
					}
				}

			}
		}

		int strike = arr[i].s;
		int ball = arr[i].b;

		flag *= ((strike == cal_strike) && (ball == cal_ball));
	}
	
	return flag;
}


int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;

	cin >> n;
	int m;
	int strike, ball;
	while (n--) {
		cin >> m >> strike >> ball;
		arr.push_back({ m,strike,ball });
	}
	int cnt = 0;
	int sum = 0;
	for (int i = 1; i <= 9; i++) {
		for (int j = 1; j <= 9; j++) {
			for (int k = 1; k <= 9; k++) {
				if (i != j && j != k && i!=k) {
					sum += (i * 100 + j * 10 + k);

					if (cal(sum))cnt++;
					sum = 0;
				}
			}
		}
	}

	cout << cnt;

}
728x90
반응형