문제 링크 : 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;
}
}
'알고리즘 문제' 카테고리의 다른 글
[알고리즘 문제/C++]백준 2231번 : 분해합 (0) | 2021.01.15 |
---|---|
[알고리즘 문제/C++]백준 2212번 : 센서 (0) | 2021.01.15 |
[알고리즘 문제/C++]백준 2178번 : 미로 탐색 (0) | 2021.01.15 |
[알고리즘 문제/C++]백준 1931번 : 회의실 배정 (0) | 2021.01.15 |
[알고리즘 문제/C++]백준 1743번 : 음식물 피하기 (0) | 2021.01.10 |