[Programmers]_C++_Algorithm_가장많이받은선물

신치우·2025년 2월 16일

C++_algorithm

목록 보기
5/17

아직은 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;
}
profile
https://shin8037.tistory.com/

0개의 댓글