본문 바로가기

PS

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

[ 문제 ]

 

2503번: 숫자 야구 (acmicpc.net)

 

[ 접근방법 ]

 

n <= 100 이고 숫자도 최대 987까지 이므로 브루트포스로도 시간은 충분하다.

 

[ 소스코드 ]

 

#include <iostream>

using namespace std;

int n, m[105], s[105], b[105], ans;

bool chkNum(int x)
{
    int d[3];
    for (int i = 0; i < 3; i++)
    {
        d[i] = x % 10;
        x /= 10;
    }

    if (d[0] == d[1] || d[1] == d[2] || d[2] == d[0])
        return false;
    if (!d[0] || !d[1] || !d[2])
        return false;

    return true;
}

bool chkGame(int idx, int x)
{
    int d[3];
    int md[3];

    for (int i = 0; i < 3; i++)
    {
        d[i] = x % 10;
        x /= 10;
    }

    x = m[idx];
    for (int i = 0; i < 3; i++)
    {
        md[i] = x % 10;
        x /= 10;
    }

    int ms = 0, mb = 0;

    for (int i = 0; i < 3; i++)
    {
        if (d[i] == md[i])
            ms++;
        if (d[i] == md[(i + 1) % 3] || d[i] == md[(i + 2) % 3])
            mb++;
    }

    return ms == s[idx] && mb == b[idx];
}

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

    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> m[i] >> s[i] >> b[i];
    }

    for (int i = 123; i <= 987; i++)
    {
        if (!chkNum(i))
            continue;

        bool chk = true;
        for (int j = 0; j < n && chk; j++)
        {
            chk = chkGame(j, i);
        }

        if (chk)
            ans++;
    }

    cout << ans;

    return 0;
}