[Topcoder] InterestingParty(흥미로운 파티)
2023. 2. 12. 18:26ㆍAlgorithm
화이트 씨는 매우 다재다능한 사람이다. 그에게는 모든 것이 확실히 흥미롭다. 아마도 이것이 그에게 많은 친구들이 있는 이유일 것이다.
하지만, 꽤 불행하게도, 그의 친구들 중 누구도 다재다능하지 않다.
그들은 각각 두 가지 주제에만 관심이 있고 다른 어떤 것에 대해서도 말하기를 거부한다.
따라서 화이트 씨가 파티를 조직할 때마다 파티가 모두에게 흥미롭게 보이도록 누구를 초대할지 결정하는 것은 큰 문제입니다.
화이트 씨는 파티를 조직한 경험이 많기 때문에 초대받은 친구들 각자에게 흥미로운 주제가 있을 때만 파티가 흥미로울 것이라는 것을 확실히 알고 있습니다.
당신은 first과 second을 받게 될 것입니다. 화이트 씨의 i번째 친구는 first[i] 와 second[i]주제에 관심이 많다.
화이트 씨가 파티에 초대할 수 있는 가장 많은 수의 친구들을 돌려주세요.
Examples
0)
{"fishing", "gardening", "swimming", "fishing"}
{"hunting", "fishing", "fishing", "biting"}
Returns: 4
This is a very easy case since everybody is interested in "fishing".
1)
{"variety", "diversity", "loquacity", "courtesy"}
{"talking", "speaking", "discussion", "meeting"}
Returns: 1
Despite being interested in "talking", "speaking", "meeting" and so on, these people have nothing to talk about with each other.
2)
{"snakes", "programming", "cobra", "monty"}
{"python", "python", "anaconda", "python"}
Returns: 3
Mr. White can invite friends 0, 1, 3 (0-based) and they will have an interesting evening talking about "python" (or at least Mr. White thinks so).
3)
{"t", "o", "p", "c", "o", "d", "e", "r", "s", "i", "n", "g", "l", "e", "r", "o", "u", "n", "d", "m", "a", "t", "c", "h", "f", "o", "u", "r", "n", "i"}
{"n", "e", "f", "o", "u", "r", "j", "a", "n", "u", "a", "r", "y", "t", "w", "e", "n", "t", "y", "t", "w", "o", "s", "a", "t", "u", "r", "d", "a", "y"}
Returns: 6
케이스 0)을 살펴보자.
{"fishing", "gardening", "swimming", "fishing"}
{"hunting", "fishing", "fishing", "biting"}
주제 fising이 모든 사람에게 포함되어 있다. 따라서 이들 모두 초대한다.
문제를 푸는 핵심은 가장 많은 사람에게 포함된 주제를 찾고, 이 주제에 흥미있는 사람들의 수를 반환하는 것이다.
#include <vector>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
class InterestingParty{
public:
int bestInvitation(vector <string> first, vector <string> second){
map<string, int> dic;
for(int i=0; i<first.size(); i++){
dic[first[i]] = 0;
dic[second[i]] = 0;
}
for(int i=0; i<first.size(); i++){
dic[first[i]]++;
dic[second[i]]++;
}
int ans =0;
map<string, int>::iterator it;
for(it = dic.begin(); it != dic.end(); it++){
ans = max(ans, it->second);
}
return ans;
}
};
전체 코드이다.
map<string, int> dic;
for(int i=0; i<first.size(); i++){
dic[first[i]] = 0;
dic[second[i]] = 0;
}
주제에 관심있는 인원들을 카운팅하기 위해 <주제 : 인원수> 로 매칭되는 딕셔너리를 선언하고 이를 모두 0으로 초기화한다.
for(int i=0; i<first.size(); i++){
dic[first[i]]++;
dic[second[i]]++;
}
그리고 각 인원들을 순회하면서 주제별로 인원수를 카운팅한다.
int ans =0;
map<string, int>::iterator it;
for(it = dic.begin(); it != dic.end(); it++){
ans = max(ans, it->second);
}
return ans;
반복자를 사용하여 모든 주제를 순회하여 딕셔너리에서 가장 많은 second(인원수, int)를 반환한다.
'Algorithm' 카테고리의 다른 글
[Topcoder] MazeMaker(미로 제작자) (0) | 2023.02.19 |
---|---|
[Topcoder] CrazyBot(미친 로봇) (0) | 2023.02.19 |
[Topcoder] Freindscore(친구 점수) (0) | 2023.02.12 |
[Topcoder] ThePalindrome(회문) (0) | 2023.02.12 |
[Topcoder] Interesting Digits(흥미로운 숫자) (0) | 2023.02.12 |