2503번 숫자 야구

뻔한·2020년 4월 13일
0

Brute force

목록 보기
9/13

문제 링크

숫자 야구

문제 풀이

질문인 숫자와 스트라이크, 볼을 입력받아 가능한 숫자의 총 개수를 구하는 문제이다.
질문을 입력받을 때마다 가능한 세자리 숫자를 표시하고, 마지막에 표시된 숫자를 세면 된다. 가능한 세자리는 900개보다 적고 질문의 수도 100개 이하이므로 완전 탐색으로 구현하면 된다. 구현이 귀찮다.

구현

#include <iostream>
#include <vector>
using namespace std;

int N;
vector<bool> isAns(1000, true);

bool check(int possibleNum, int n, int s, int b) {
    int strike = 0, ball = 0;

    int pNum[3], inNum[3];
    for (int i = 0; i < 3; ++i) {
        pNum[i] = possibleNum % 10;
        possibleNum /= 10;
    }
    for (int i = 0; i < 3; ++i) {
        inNum[i] = n % 10;
        n /= 10;
    }
    if (pNum[0] == 0 || pNum[1] == 0 || pNum[2] == 0) 
        return false;
    if (pNum[0] == pNum[1] || pNum[0] == pNum[2] || pNum[1] == pNum[2]) 
        return false;

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

    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 3; ++j) {
            if (pNum[i] == inNum[j]) {
                if (i == j) ++strike;
                else ++ball;
            }
        }
    }
    if (s == strike && b == ball) return true;
    return false;
}

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

    cin >> N;
    while (N--) {
        int n, s, b;
        cin >> n >> s >> b;
        for (int i = 100; i < 1000; ++i)
            if (isAns[i] && !check(i, n, s, b)) 
                isAns[i] = false;
    }
    int ret = 0;
    for (int i = 100; i < 1000; ++i)
        if (isAns[i]) ++ret;
    cout << ret;
    return 0;
}
profile
ㄷㄷㄷㅈ

0개의 댓글