[C++] 백준 2503번: 숫자 야구

be_clever·2022년 1월 26일
0

Baekjoon Online Judge

목록 보기
49/172

문제 링크

2503번: 숫자 야구

문제 요약

숫자 야구 게임에 대한 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;
}
profile
똑똑해지고 싶어요

0개의 댓글