공부/C++
[C++] 프로그래머스 비밀 코드 해독
굴러다니다니
2025. 5. 19. 15:26
1. 일단 check 함수를 만들어서 같은 값 몇 개 있는지 확인하는 함수 선언
2. backtrack 이라는 함수가 있다는 가정으로 solution 코드 만들기
3. backtrack에서 index를 이용해 수 넣고 빼고 뭐시기~
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int check(vector<int> sample, vector<int> current) { //sample과 current를 비교해 같은 값이 몇 개인지 반환
int count = 0;
for (int i = 0; i < sample.size(); i++) {
for (int j = 0; j < current.size(); j++) {
if (sample[i] == current[j]) {
count++;
break;
}
}
}
return count;
}
int answer = 0;
void backtrack(int n, vector<vector<int>>& q, vector<int>& ans, vector<int>& current, int idx) {
if (current.size() == 5) { //다 채웠다면
for (int i = 0; i < q.size(); i++) {
if (check(q[i], current) != ans[i]) { //ans 값이랑 다 맞는지 확인
return; //틀리면 빠꾸
}
}
answer++; //ans 값이랑 다 맞아서 answer 경우의 수 값 증가
return;
}
//아직 5개 값 다 못 넣었다면
for (int i = idx; i <= n; i++) { //idx ~ n 범위까지
current.push_back(i); //하나 넣어서
backtrack(n, q, ans, current, i + 1); //돌려보고
current.pop_back(); //넣은 값 빼기
}
}
int solution(int n, vector<vector<int>> q, vector<int> ans) {
vector<int> current;
answer = 0;
backtrack(n, q, ans, current, 1);
return answer;
}
728x90
반응형