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

 

프로그래머스

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

programmers.co.kr

 

#해설

본문을 그대로 따라서 구현하면 되는 문제

1. 여기서 선물주는 기록이 문자열로 주어지기 때문에 sstream을 통해 문자열 분리 입력받고 

2. 2차원 배열을 각 이름에 맞게 만들어 주기 위해서 각 이름과 인덱스를 map을 이용해 맵핑해주기

3.주고받은 선물 수 비교 후 같으면 선물지수로 비교후 최대값 갱신

4. 끝

 

 

 

#코드

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

using namespace std;

int solution(vector<string> friends, vector<string> gifts) {
    
    int fSize = friends.size();
    vector<vector<int>> giftCount (fSize, vector<int> (fSize, 0)); //주고받은 선물
    vector<int> giftFactor (fSize,0); //선물 지수
    vector<int> giftRank (fSize,0); // 다음달 받을 선물 개수
    
    //친구들의 인덱스와 이름 매칭
    map<string,int> friendsMap;
    for(int i=0; i<fSize; i++){
        friendsMap.insert({friends[i],i});
    }
    
    for(string s : gifts){
        string first,second;
        stringstream ss (s);
        
        ss >> first >> second;
        
        
        giftCount[friendsMap[first]][friendsMap[second]]++;
        giftFactor[friendsMap[first]]++;
        giftFactor[friendsMap[second]]--;
        
        //cout << first << " " << second << endl;
        //cout << friendsMap[first] << " " << friendsMap[second] << endl;
        
    }
    
    //테스트 출력 코드
    for(int i=0; i < fSize; i++){
        for(int j=0; j<fSize; j++){
            cout << giftCount[i][j] << " ";
        }
        cout << endl;
    }
    
    for(int a : giftFactor){
        cout << a << endl;
    }
    
    
    //선물 개수 갱신
    int max = 0;
    for(int i=0; i<fSize; i++){
        for(int j=0; j<fSize; j++){
            if(i != j){
                if(giftCount[i][j] > giftCount[j][i]){
                    giftRank[i]++;
                    if(giftRank[i]> max){
                        max = giftRank[i];
                    }
                }
                else if(giftCount[i][j] == giftCount[j][i]){
                    if(giftFactor[i] > giftFactor[j]){
                        giftRank[i]++;
                        if(giftRank[i]>max){
                            max = giftRank[i];
                        }
                    }
                }
            }
        }
    }
    
    return max;
    
    
}

+ Recent posts