https://school.programmers.co.kr/learn/courses/30/lessons/150368
* 중복순열
result에 idx가 저장된다.
result[i]를 가지고 실제데이터에 접근하면된다.
ex) sale[]={10,20,30,40}
result={0,1}
saleV={10,20}
void permRe(){
if(result.size()==N){
//Logic
for(auto i : result){
cout<<i<<" ";
}
return;
}
for(int i=0;i<4;++i){
result.push_back(i);
permRe();
result.pop_back();
}
}
* vector<pair<int,int>>정렬방법
※ 매개변수 : pair<int,int>> v1, v2 여야함에 주의
vector<pair<int,int>> 아님!
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
"<" 정렬 ->오름차순
">" 정렬 -> 내림차순
bool cmp(pair<int,int> v1, pair<int,int> v2){
if(v1.first==v2.first){
return v1.second>v2.second;
}
return v1.first>v2.first;
}
#include <bits/stdc++.h>
using namespace std;
int _sale[]={10,20,30,40};
vector<int> result; //중복조합된 idx들 저장
vector<int> saleV;
vector<pair<int,int>> ret;
vector<vector<int>> Users;
vector<int> Emoticons;
int N;
void buy(){
int allSum=0;
int service=0;
for(auto user:Users){
int sum=0;
bool flag=0;
for(int j=0;j<Emoticons.size();++j){
if(user[0]<=saleV[j]){
sum+=Emoticons[j]/100*(100-saleV[j]);
}
if(sum>=user[1]){
service++;
flag=1;
break;
}
}
if(!flag){
allSum+=sum;
}
}
ret.push_back({service,allSum});
}
//1. 이모티콘할인율 중복조합 10,20,30,40
void permRe(){
if(result.size()==N){
/*for(auto i : result){
cout<<i<<" ";
//cout<<sale[i]<<" ";
}
cout<<endl;*/
//1. 이모티콘별 할인율 저장
//saleV[0] == 이모티콘0번 할인율
for(auto a: result){
//cout<<_sale[a]<<" ";
saleV.push_back(_sale[a]);
}
//2. 할인율이상->구매
buy();
saleV.clear();
return;
}
for(int i=0;i<4;++i){
result.push_back(i);
permRe();
result.pop_back();
}
}
bool cmp(pair<int,int> v1, pair<int,int> v2){
if(v1.first==v2.first){
return v1.second>v2.second;
}
return v1.first>v2.first;
}
vector<int> solution(vector<vector<int>> users, vector<int> emoticons) {
vector<int> answer;
N=emoticons.size();
Users=users; Emoticons=emoticons;
//for(auto i : sale) cout<<i<<" ";
//1. 이모티콘할인율 조합 10,20,30,40
permRe();
//2. 할인율이상->구매
//3. 가격보다크면 -> 서비스가입
//4. 그때의 서비스가입,판매값 push
//5. 정렬(기준 : 서비스가입수, 같으면 점수순)
sort(ret.begin(),ret.end(),cmp);
for(auto p : ret){
cout<<p.first<<" "<<p.second<<endl;
}
//6. answer.push(마지막)
answer.push_back(ret[0].first);
answer.push_back(ret[0].second);
return answer;
}
'Algorithm > programmers' 카테고리의 다른 글
프로그래머스 캐시 Python cpp //LRU구현 ,tolower (0) | 2023.07.11 |
---|---|
프로그래머스 비밀지도 cpp python// 비트연산 문자열 (0) | 2023.07.11 |
프로그래머스 개인정보 수집 유효기간 // c++ split, 단위를통일하라, 함수화하고 cout으로 단위테스트하라. (0) | 2023.06.28 |
프로그래머스 거리두기체크하기 // 2차원벡터다루기 형식, 종이에그려보며 규칙세우기 , 2차원배열 초기화방법 (0) | 2023.06.24 |
프로그래머스 숫자카드나누기 // 복잡하면 함수로.. , 배열을 정렬하라. (0) | 2023.06.22 |