https://school.programmers.co.kr/learn/courses/30/lessons/258712
#해설
본문을 그대로 따라서 구현하면 되는 문제
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;
}
'[프로그래머스] > lv.1' 카테고리의 다른 글
[프로그래머스] 흉부외과 또는 일반외과 의사 목록 출력하기 [C++][lv.1] (0) | 2024.09.18 |
---|---|
[프로그래머스] 평균 일일 대여 요금 구하기[C++][lv.1] (0) | 2024.09.18 |