반응형
숫자야구는 게임기가 없던 시절에 자주 했던 게임이죠. 숫자위치에 따라서 스트라이크와 볼을 불러주면, 그 결과에 따라서 상대방의 숫자를 맞추는 게임입니다.
https://www.acmicpc.net/problem/2503
이번 문제는 기존에 나온 결과를 가지고 가능성이 있는 숫자들의 개수를 알아내는 문제입니다. 이것을 이용하면 사람과 컴퓨터간에 숫자야구 게임을 만들 수도 있습니다.
알고리즘은 상당히 간단합니다. 모든 숫자리스트에 대해서 스트라이크와 볼을 기존 히스토리에 대해서 하면서 같은 결과가 나오면 가능성 있는 숫자가 됩니다. 이것을 카운팅하면 됩니다.
제가 작성한 소스입니다.
//------------------------------------------------
// baekjoon #2503
// - by Aubrey Choi
// - created at 2019-07-06
//------------------------------------------------
#include <stdio.h>
int main()
{
int n, h[100][5], st, ba, ans = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%d%d%d", &h[i][0], &h[i][1], &h[i][2]);
for(int a = 1; a <= 9; a++)
{
for(int b = 1; b <= 9; b++)
{
if(a == b) continue;
for(int c = 1; c <= 9; c++)
{
if(a == c || b == c) continue;
bool found = true;
for(int i = 0; i < n; i++)
{
int ca = h[i][0]/100, cb = (h[i][0]/10)%10, cc = h[i][0]%10;
st = ba = 0;
if(a == ca) st++;
if(b == cb) st++;
if(c == cc) st++;
if(a == cb || a == cc) ba++;
if(b == ca || b == cc) ba++;
if(c == ca || c == cb) ba++;
if(st != h[i][1] || ba != h[i][2])
{
found = false;
break;
}
}
if(found) ans++;
}
}
}
printf("%d\n", ans);
return 0;
}
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #2512 예산(이분 탐색) (0) | 2023.06.12 |
---|---|
[C/C++] 백준 #2504 괄호의 값(스택) (3) | 2023.05.30 |
[C/C++] 백준 #2502 떡 먹는 호랑이(구현) (0) | 2023.05.28 |
[C/C++] 백준 #2493 탑(스택) (0) | 2023.05.24 |
[C/C++] 백준 #2491 수열(구현) (0) | 2023.05.23 |
댓글