Computer Science/알고리즘(백준+프로그래머스)

week 7- 수열 조합 & 계획 쇼핑의 제왕

#include<iostream>
#include<vector>
#include<string.h>
#include<math.h>
using namespace std;

int number[9];
bool sel[9];
vector<long long>V;
vector<long long>result;
int num = 0;//주어진 자연수의 개수
int mul = 0;//피승수
int answer = 0;
int rangel, rangeh;//범위

void calculate(vector<long long> v) {
	long long res = 0;
	for (int i = 0; i < v.size(); i++) {
		long long k = pow(mul, i);
		res = res + k * v[i];
	}
	res = res % 1013;
	result.push_back(res);
}

int check(vector<long long> v) {
	for (int i = 0; i < v.size(); i++) {
	  if (v[i] >= rangel && v[i] <= rangeh) {
			answer++;
		}
	}
	return answer;
}


void dfs(int depth) {
	if (depth == num) {
		calculate(V);
		return;
	}

	for (int i = 0; i < num; i++) {
		if (sel[i] == true)continue;
		sel[i] = true;
		V.push_back(number[i]);
		dfs(depth + 1);
		V.pop_back();
		sel[i] = false;
	}

}


int main() {

	int T;
	cin >> T;
	for (int i = 0; i < T; i++) {
		memset(number, 0, sizeof(number));

		cin >> num;
		for (int j = 0; j < num; j++) {
			cin >> number[j];
		}
		
		cin >> rangel >> rangeh >> mul;//범위 두개, 수열 r

		dfs(0);
		cout<<check(result)<<endl;

	
		V.clear();
		result.clear();
		answer = 0;
	}


}

 

#2 ; 계획 쇼핑 : 미완성