본문 바로가기
BOJ

BOJ 2503 숫자야구

by 홍code 2022. 3. 9.

문제링크 : https://www.acmicpc.net/problem/2503

 

2503번: 숫자 야구

첫째 줄에는 민혁이가 영수에게 몇 번이나 질문을 했는지를 나타내는 1 이상 100 이하의 자연수 N이 주어진다. 이어지는 N개의 줄에는 각 줄마다 민혁이가 질문한 세 자리 수와 영수가 답한 스트

www.acmicpc.net

요약

우리가 알고있는 숫자야구게임을 한다. (숫자는 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";
}

'BOJ' 카테고리의 다른 글

BOJ 1182 부분수열의 합  (2) 2022.03.09
BOJ 1018 체스판 다시 칠하기  (0) 2022.03.09
BOJ 10448 유레카 이론  (0) 2022.03.09
BOJ 3085 사탕게임  (0) 2022.03.09
BOJ 2231 분해합  (0) 2022.03.09

댓글