본문 바로가기
알고리즘/백준

[백준] 2503 숫자야구 c++

by 오오오니 2022. 7. 8.

 

정답률은 높은데 나는 너무 어려웠다.

설마 모든케이스에 대해서 하나하나 다 확인해보는 거겠어?하고 규칙을 찾으려고 했는데 너무 복잡했다.

규칙을 찾아서 추리는 것이 아니라 그냥 모두 확인해보면 되는 문제였다.

123~989 숫자중에 중복이 각 자리의 숫자들은 서로 달라야하므로 제외하고 1~9까지만 들어갈 수 있으므로 0이 들어가는 수도 제외한 다음에 스트라이크와 볼 개수가 같은지를 체크하고 다르면 true로 바꾸어준다.

<스트라이크, 볼 >마다 123~989까지 모두 검사를 해주고 num 배열에서 false로 남은것의 개수를 세어줘서 출력해줬다.

 

 

#include<iostream>
#include<string>

using namespace std;

int N,cnt;
bool num[1000];
string q,temp;
int strike, ball;
int strikeTmp, ballTmp;
int main()
{
	
	cin >> N;
	
	
	while (N--)
	{
		
		cin >> q >> strike >> ball;//1 1
		for (int i = 123; i < 998; i++)
		{
			temp = to_string(i);
			strikeTmp=0, ballTmp=0;
			//0이 들어간 것도 제외
			if (temp[0] == temp[1] || temp[0] == temp[2] || temp[1] == temp[2]||(temp[1]-'0')*(temp[2]-'0')==0)
			{
				num[i] = true;
				
				continue;
			}
			for(int j=0;j<3;j++)
				for (int k = 0; k < 3; k++)
				{
					if (j == k)
					{
						if(q[j] == temp[k])
							strikeTmp++;

					}
					else
					{
						if (q[j] == temp[k])
							ballTmp++;
					}
					
				}
			
			if (strike != strikeTmp || ball != ballTmp)
				num[i] = true;
				

		}
		
	}

	int ans = 0;
	for (int i = 123; i < 998; i++)
	{
		if (!num[i])
			ans++;
	}
	cout << ans << "\n";
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 10971 외판원 순회 2 c++  (0) 2022.08.04
[백준] 1759 암호만들기 c++  (0) 2022.07.08
[백준] 1780 종이의 개수  (0) 2022.06.04
[백준] 2839설탕배달 c++  (0) 2022.05.28
[백준 ] 2042 구간합 구하기 C++  (0) 2022.05.22