プログラマー-多段歯ブラシの販売-C++
3780 ワード
https://programmers.co.kr/learn/courses/30/lessons/77486
会社は収益金額の10%を推薦者に振り替える方式で運営している.
歯ブラシ販売情報が
しかし、問題の10%の収益が1元未満であれば、推薦者に金額を推薦することはありません.
問題では,相互に関連するパラメータを整理して
コードで直接見ましょう!
問題の説明
会社は収益金額の10%を推薦者に振り替える方式で運営している.
歯ブラシ販売情報が
vector<int> amount
形で提供されると、会社員それぞれの収入が返還される.しかし、問題の10%の収益が1元未満であれば、推薦者に金額を推薦することはありません.
方法
問題では,相互に関連するパラメータを整理して
unordered_map
に組み合わせると,あまり困難ではない.enroll
のインデックスとreferral
のインデックスは互いに同じ従業員を指しているため、unordered_map<string, int> e_id
にはenroll
の情報が含まれており、名前->インデックスでアクセス可能な資料構造が生成される.seller
およびamount
のインデックスは同じ従業員を指すため、seller
の情報はforに変換される.unordered_map<string, int> ans
が生成され、1人当たりの収入が格納される.seller
に対する「for」案では、while路referral
に推薦金額を伝え、条件を繰り返すだけでよい.コードで直接見ましょう!
に答える
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
unordered_map<string,int> e_id; // enroll, referral에 사용 가능한 idx table
unordered_map<string,int> ans; // 이름, 총 수익 금액이 들어갈 table
vector<int> solution(vector<string> enroll, vector<string> referral, vector<string> seller, vector<int> amount) {
vector<int> answer;
for(int i=0;i<enroll.size();i++){
e_id[enroll[i]] = i;
}
// 비지니스 로직
for(int i=0;i<seller.size();i++){
int total = amount[i]*100;
string tmp = seller[i];
int recom_cost = total*0.1;
ans[tmp] += total*0.9;
while(referral[ e_id[ tmp ] ] != "-" || recom_cost != 0){
// 1원 미만이면 추천인 cost를 지불하지 않음
ans[referral[e_id[tmp]]] += recom_cost-int(recom_cost*0.1);
recom_cost *= 0.1;
tmp = referral[e_id[tmp]];
}
}
for(int i=0;i<enroll.size();i++){
answer.push_back(ans[enroll[i]]);
}
return answer;
}
結果
Reference
この問題について(プログラマー-多段歯ブラシの販売-C++), 我々は、より多くの情報をここで見つけました https://velog.io/@961230/프로그래머스-다단계-칫솔-판매-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol