[BOJ-Code] 2503 - 숫자 야구

Posted by DHniyeo Blog on March 10, 2024

문제 링크

💡 브루트포스 알고리즘/구현

Memory 1112KB Time 0ms Code Length 950B

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include<stdio.h>
struct info {
	int num;
	int strike;
	int ball;
};
int main()
{
	int n;
	info arr[100];
	scanf("%d", &n);

	for (int i = 0; i < n; i++)
	{
		scanf(" %d %d %d", &arr[i].num, &arr[i].strike, &arr[i].ball);
	}

	int cnt = 0;
	for (int i = 123; i <= 987; i++) {
		int a = i / 100;
		int b = (i % 100) / 10;
		int c = i % 10;
		if (a == b || b == c || a == c)continue;
		if (a == 0 || b == 0 || c == 0) continue;
		int collect = 0;
		for (int j = 0; j < n; j++) {
			int x = arr[j].num / 100;
			int y = (arr[j].num % 100) / 10;
			int z = arr[j].num % 10;
			int strike = 0;
			int ball = 0;
			if (a == x) strike++;
			if (a == y) ball++;
			if (a == z) ball++;
			if (b == x) ball++;
			if (b == y) strike++;
			if (b == z) ball++;
			if (c == x) ball++;
			if (c == y) ball++;
			if (c == z) strike++;
			if (strike != arr[j].strike || ball != arr[j].ball)break;
			collect++;
		}
		if (collect == n) cnt++;
	}

	printf("%d", cnt);
}

이 코드는 3자리 숫자 야구 게임을 구현하는 프로그램이다.

사용자로부터 몇 번의 시도를 할 것인지 입력을 받는다.

그 후에 각 시도에 대한 숫자와 스트라이크, 볼의 정보를 입력 받는다.

123부터 987까지의 모든 가능한 3자리 숫자에 대해 반복문을 실행한다.

각 숫자를 세 자리로 분리하여 중복되는 숫자가 없고 0을 포함하지 않는지 확인한다.

입력받은 시도들과 비교하여 스트라이크와 볼의 개수를 계산하고, 입력받은 스트라이크와 볼의 개수와 일치하는지 확인한다.

모든 시도에 대해 일치하는 경우를 세고, 그 개수를 출력한다.