Creative Code

가장 많이 받은 선물 본문

프로그래머스 코테 문제/LEVEL 1

가장 많이 받은 선물

빛하루 2024. 4. 12. 20:08

https://school.programmers.co.kr/learn/courses/30/lessons/258712

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <map>
#include <sstream>
#include <cmath>

using namespace std;

int solution(vector<string> friends, vector<string> gifts) {
    int answer = 0;
    map<pair<string, string>, int>gift; //선물내역 저장
    map<string, int>giftrate;//선물지수 저장
    for (int i = 0; i < gifts.size(); i++) {
        stringstream ss(gifts[i]);
        string str;
        vector<string>giver;
        while (getline(ss,str,' ')) { // 문자열 띄어쓰기 기준으로 파싱
            giver.push_back(str);
        }
        gift[{giver[0], giver[1]}]++; //두 사람간 주고받은 선물개수
        giftrate[giver[0]]++; // 선물을 준 사람의 선물지수 추가
        giftrate[giver[1]]--; // 선물을 받은 사람의 선물지수 감소
    }

    map<string, int>result;
    for (int i = 0; i < friends.size()-1; i++) {
        for (int j = i+1; j < friends.size(); j++) {
            if (i == j) continue;
            else {
                if (gift[{friends[i], friends[j]}] > gift[{friends[j], friends[i]}]) {
                    result[friends[i]]++; // 선물을 준 개수가 더 많은 사람은 받는 선물의개수 +1
                }
                else if (gift[{friends[i], friends[j]}] < gift[{friends[j], friends[i]}]) {
                    result[friends[j]]++; 
                }
                else if (gift[{friends[i], friends[j]}] == gift[{friends[j], friends[i]}]) {
                    if (giftrate[friends[i]] > giftrate[friends[j]]) {
                        result[friends[i]]++;
                    }
                    else if (giftrate[friends[i]] < giftrate[friends[j]]) {
                        result[friends[j]]++;
                    } // 선물을 주고받은 개수가 같을 땐 선물지수가 높은사람이 받는 선물의개수 +1
                }
            }
        }
    }
    for (auto k = result.begin(); k != result.end(); k++) {//선물을 가장 많이받는 사람의 개수찾기
        answer = max(answer, k->second);
    }
    return answer;
}

int main() {
    cout << solution({ "muzi","ryan","frodo","neo" }, { "muzi frodo","muzi frodo","ryan muzi",
        "ryan muzi","ryan muzi","frodo muzi","frodo ryan","neo muzi" }) << endl;
    cout << solution({ "joy","brad","alessandro","conan","david" },
        { "alessandro brad","alessandro joy","alessandro conan", "david alessandro",
        "alessandro david" }) << endl;
    cout << solution({ "a","b","c" }, { "a b","b a","c a","a c","a c","c a" }) << endl;
}

'프로그래머스 코테 문제 > LEVEL 1' 카테고리의 다른 글

데이터 분석  (0) 2024.04.12
이웃한 칸  (0) 2024.04.12
붕대 감기  (0) 2024.04.12