코딩문제 풀이

13908번 비밀번호

student513 2020. 2. 4. 15:40
 

13908번: 비밀번호

첫 번째 예제의 경우 가능한 비밀번호의 조합은 07, 17, 27, 37, 47, 57, 67, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 87, 97이다. 두 번째 예제의 경우 가능한 비밀번호의 조합은 34, 43이다.

www.acmicpc.net

비밀번호의 일부분을 알고 있다는 전제 하에 모든 비밀번호 조합의 개수를 찾는 브루트포스 문제.

 

모든 비밀번호를 쭉 나열한 다음, 조건을 만족하는 비밀번호가 등장할 때마다 count해주면 된다.

 

#include <iostream>
#include <vector>
using namespace std;

vector<pair<int,bool>> vec;
int n, m, temp;
bool visited[8];
int answer[8];
int result;

void print() {//디버깅
	for (int i = 0; i < n; i++) {
		cout << answer[i] << " ";
	}
	cout << "\n";
}

void chk() {
	int count = 0;
	for (int i = 0; i < m; i++)
		vec[i].second = false;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (answer[i] == vec[j].first && !vec[j].second) {
				count++;
				vec[j].second = true;
			}
		}
	}

	if (count == m)result++;
}

void bfc(int index) {
	if (index == n) {
		//print();
		chk();
		return;
	}
	for (int i = 0; i < 10; i++) {
		answer[index] = i;
		bfc(index + 1);
	}
}

int main() {
	cin >> n >> m;
	for (int i = 0; i < m; i++) {
		cin >> temp;
		vec.push_back(make_pair(temp,false));
	}
	bfc(0);
	cout << result;
	return 0;
}

'코딩문제 풀이' 카테고리의 다른 글

4963번 섬의 개수  (0) 2020.02.10
11727번 2xn 타일링 2  (0) 2020.02.07
17144번 미세먼지 안녕!  (0) 2020.01.30
14891번 톱니바퀴  (0) 2020.01.21
14888번 연산자 끼워넣기  (0) 2020.01.17