BOJ 2503 숫자야구
BOJ 2503 숫자야구
문제링크 : <https://www.acmicpc.net/problem/2503
요약
우리가 알고있는 숫자야구게임을 한다. (숫자는 1~9까지, 중복안됨) 제시한 숫자와 스트라크, 볼의 갯수를 n만큼 입력받으면 이것에서 유추할수있는 숫자의 개수를 구하는 문제이다.
풀이
123~987까지의 모든 값에 대응하는 배열을 만들고 질문 하나하나 돌면서 조건에 어긋나는 수들을 패스하고 모두 성립하는 수를 만나면 카운트해준다.
코드
#include<iostream>
#include<string>
using namespace std;
int n,a[101],b[101],ans,chk;
string str[101];
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> str[i] >> a[i] >> b[i];
}
for (int i = 134; i <= 987; i++) {
string str2 = to_string(i);
if (str2[0] == str2[1] || str2[1] == str2[2] || str2[0] == str2[2]) continue;
if (str2[1] == '0' || str2[2] == '0') continue;
for (int j = 0; j < n; j++) {
int strike = 0, ball = 0;
string str3 = str[j];
for (int k = 0; k < 3; k++){
for (int p = 0; p < 3; p++) {
if (str2[k] == str3[p] && k == p) {
strike++;
}
else if (str2[k] == str3[p]) {
ball++;
}
}
}
if (strike != a[j] || ball != b[j]) {
chk = -1;
break;
}
}
if (chk != -1) {
ans++;
}
chk = 0;
}
cout << ans << "\n";
}
Comments