아직은 python이 너무 익숙한 상태이다.
cpp에 익숙해지면서 더 코드를 간결하게 짤수 있게 해보자
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<string> friends, vector<string> gifts) {
int answer = 0;
int rows = friends.size();
vector<vector<int>> vec(rows, vector<int>(rows, 0));
vector<int> gift_scores(friends.size(), 0);
vector<int> answer_(friends.size(), 0);
for (int i = 0; i < gifts.size(); i++){
stringstream ss(gifts[i]);
string giver, receiver;
ss >> giver >> receiver;
auto it = find(friends.begin(), friends.end(), giver);
auto it2 = find(friends.begin(), friends.end(), receiver);
int giver_idx = distance(friends.begin(), it);
int rece_idx = distance(friends.begin(), it2);
vec[giver_idx][rece_idx]++;
}
for (int i = 0; i< vec.size(); i++){
// 2. 선물 지수 비교
int give = 0;
int receive = 0;
for (int j = 0; j<vec.size(); j++){
give += vec[i][j];
}
for (int k = 0; k<vec.size(); k++){
receive += vec[k][i];
}
gift_scores[i] = give - receive;
}
for (int i = 0; i< vec.size(); i++){
// 1. 준사람 vs 받은사람 누가 더 많이 주고 받았는지 확인
// 준사람을 기준으로 한칸씩 이동해야하니깐
for (int j= i; j<vec.size(); j++){
// cout << friends[i] << " " << friends[j] << endl;
// cout << vec[i][j] << " " << vec[j][i] << endl;
if (vec[i][j] > vec[j][i]){ // 준사람[i] > 받은사람[j]
answer_[i]++;
} else if (vec[j][i] > vec[i][j]){ // 받은사람 > 준사람
answer_[j]++;
} else { // 둘다 주고받지 않았거나 수가 같다면
if (gift_scores[i] > gift_scores[j])
answer_[i]++;
else if (gift_scores[j] > gift_scores[i])
answer_[j]++;
}
}
}
//for(int i = 0; i < answer_.size(); i++)
// cout << answer_[i] << endl;
answer = *max_element(answer_.begin(), answer_.end());
// for(int i=0; i<vec.size();i++){
// for(int j=0; j<vec.size();j++){
// cout << vec[i][j] << " ";
// }
// cout << endl;
// }
// for(int i=0; i<gift_scores.size();i++)
// cout << gift_scores[i] << endl;
return answer;
}