본문 바로가기

알고리즘 문제

[알고리즘 문제/C++]백준 2503번 : 숫자 야구

문제 링크 : https://www.acmicpc.net/problem/2503

 

2503번: 숫자 야구

첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트

www.acmicpc.net

이 문제는 프루트 포스(완전탐색) 알고리즘을 사용해 풀 수 있습니다.

코드

#include<iostream>
#include<vector>
using namespace std;
int find (int i, vector<vector<int>> vec, int a);

int main()
{    
    int qnum = 0;
    int result = 0;
    cin >> qnum;
    vector<vector<int>> vec;
    for(int i = 0; i < qnum; i++)
    {
        vector<int> v(3);
        vec.push_back(v);
    }
    for(int p = 0; p < qnum; p++)
        for(int q= 0; q < 3; q++)
            cin >> vec[p][q];

    for(int i = 111; i < 1000; i++)
    {
        int check = 0;
        for(int count = 0; count < qnum; count++)
        {
            check = check + find(i, vec, count);
        }
        if(check%(qnum * 2)==0)
            result++;
    }

    cout << result << endl;

    return 0;
}

int find(int i, vector<vector<int>> vec, int a)
{
    int s = 0, b = 0;
    int hi = i/100;
    int ti = (i/10)%10;
    int oi = i%10;
    int hv = vec[a][0]/100;
    int tv = (vec[a][0]/10)%10;
    int ov = vec[a][0]%10;
    
    if(hi==ti || hi == oi || ti == oi || ti == 0 || oi == 0)
        return 1;

    if(hi == hv)
        s++;
    if(hi == tv)
        b++;
    if(hi == ov)
        b++;

    if(ti == hv)
        b++;
    if(ti == tv)
        s++;
    if(ti == ov)
        b++;

    if(oi == hv)
        b++;
    if(oi == tv)
        b++;
    if(oi == ov)
        s++;

    if(vec[a][1] == s && vec[a][2] == b)
    {
        return 2;
    }
    else
    {
        return 1;
    }
}