2503번: 숫자 야구
첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트라이크 개수를 나타내는 정수와 볼의 개수를 나타내는 정수, 이렇게 총 세 개의 정수가 빈칸을 사이에 두고 주어진다.
www.acmicpc.net
솔루션만 생각해낸다면 어렵지 않게 구현할 수 있다.
필자는 민혁이가 질문한 숫자와 그 숫자에 대한 스트라이크, 볼 갯수를 vector배열에 저장한 다음 1~9까지 숫자로 세 자리 숫자를 만들 수 있는 모든 경우의 수(숫자 중복 제외)에 대하여 질문한 숫자와 비교해 스트라이크, 볼 갯수가 모두 일치한다면 카운트를 1증가 시키는 식으로 구현하였다.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<pair<string, pair<int, int>>> 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<string, pair<int, int>>>::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 == 3) return 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
내일도 열심히!
'알고리즘 > BOJ' 카테고리의 다른 글
백준 1051번 : 숫자 정사각형 (0) | 2020.04.24 |
---|---|
백준 3085번: 사탕 게임 (c++) (0) | 2020.04.24 |
백준 15684번: 사다리 조작 (c++) (0) | 2020.04.22 |
백준 10448: 유레카 이론 (c++) (0) | 2020.04.21 |
백준 1748번: 수 이어 쓰기 1 (C++) (0) | 2020.04.20 |