공부/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
반응형