[문제 링크]

 

2503번: 숫자 야구

첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트라이크 개수를 나타내는 정수와 볼의 개수를 나타내는 정수, 이렇게 총 세 개의 정수가 빈칸을 사이에 두고 주어진다.

www.acmicpc.net


솔루션만 생각해낸다면 어렵지 않게 구현할 수 있다.

필자는 민혁이가 질문한 숫자와 그 숫자에 대한 스트라이크, 볼 갯수를 vector배열에 저장한 다음 1~9까지 숫자로 세 자리 숫자를 만들 수 있는 모든 경우의 수(숫자 중복 제외)에 대하여 질문한 숫자와 비교해 스트라이크, 볼 갯수가 모두 일치한다면 카운트를 1증가 시키는 식으로 구현하였다.


 
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<pair<stringpair<intint>>> answer;
 
int Solution()
{
    int cnt = 0;
    int strike, ball;
    bool check;
    for(int i=1; i<10; i++)
        for (int j = 1; j < 10; j++)
        {
            if (j == i) continue;
            for (int k = 1; k < 10; k++)
            {
                if (k == i || k == j) continue;
                check = true;
                for (vector<pair<stringpair<intint>>>::size_type l = 0; l < answer.size(); l++)
                {
                    strike = ball = 0;
                    for (int m = 0; m < 3; m++)
                    {
                        int number = answer[l].first[m] - '0';
                        if (i == number || j == number || k == number)
                        {
                            if (i == number && m == 0) strike++;
                            else if (j == number && m == 1) strike++;
                            else if (k == number && m == 2) strike++;
                            else ball++;
                        }
                    }
                    if (answer[l].second.first != strike || answer[l].second.second != ball)
                    {
                        check = false;
                        break;
                    }
                    if (strike == 3return 1;
                }
                if (check)
                    cnt++;
            }
        }
    return cnt;
}
int main(void)
{
    int ans;
    cin >> ans;
    while (ans--)
    {
        string number;
        int strike, ball;
        cin >> number >> strike >> ball;
        answer.push_back(make_pair(number, make_pair(strike, ball)));
    }
    cout << Solution() << endl;
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

알고리즘 200일 프로젝트 - 18day

내일도 열심히!

+ Recent posts