336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
문제 : https://www.acmicpc.net/problem/2503
프로그래머스에서 푼 문제와 동일하다.
처음에 계속 틀렸다고 나오길래 다시보니 0은 포함하지 않는다.
#include <string>
#include <vector>
#include <set>
#include <iostream>
using namespace std;
set<int> possibles;
void makePossible(string num, int cnt, vector<bool>& visited) {
if (cnt == 3) {
possibles.insert(atoi(num.c_str()));
return;
}
for (int i = 1; i < 10; i++) {
if (!visited[i]) {
visited[i] = true;
makePossible(num + to_string(i), cnt + 1, visited);
visited[i] = false;
}
}
}
void deleteNotPoss(int predict, int strike, int ball) {
string predict_str = to_string(predict);
for (set<int>::iterator it = possibles.begin(); it != possibles.end(); ) {
string it_str = to_string(*it);
int S = 0, B = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (predict_str[i] == it_str[j]) {
if (i == j) S++;
else B++;
}
}
}
if (strike != S || ball != B) {
set<int>::iterator temp = it;
temp++;
possibles.erase(*it);
it = temp;
}
else
it++;
}
}
int main() {
int answer = 0, n;
vector<bool> visited(10, false);
makePossible("", 0, visited);
cin >> n;
for (int i = 0; i < n; i++) {
int predict, strike, ball;
cin >> predict >> strike >> ball;
deleteNotPoss(predict, strike, ball);
}
answer = possibles.size();
printf("%d\n", answer);
return 0;
}
'PS > 백준 문제풀이' 카테고리의 다른 글
[백준 2075] N번째 큰 수 (0) | 2019.08.29 |
---|---|
[백준 1715] 카드 정렬하기 (0) | 2019.08.29 |
[백준 1620] 나는야 포켓몬 마스터 이다솜 (0) | 2019.08.21 |
[백준 1269] 대칭 차집합 (0) | 2019.08.21 |
[백준 1068] 트리 (0) | 2019.08.17 |