정답률은 높은데 나는 너무 어려웠다.
설마 모든케이스에 대해서 하나하나 다 확인해보는 거겠어?하고 규칙을 찾으려고 했는데 너무 복잡했다.
규칙을 찾아서 추리는 것이 아니라 그냥 모두 확인해보면 되는 문제였다.
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 |