반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // Complete the acmTeam function below. vector<int> acmTeam(vector<string> topic) { int maxCount = 0, maxTeams = 0; for(int i = 0; i < topic.size(); i++) { string s1 = topic[i]; for(int j = i + 1; j < topic.size(); j++) { string s2 = topic[j]; int tempMax = 0, tempMaxTeam = 0; for(int k = 0; k < s2.length(); k++) { if(s1[k] == '1' || s2[k] == '1') { tempMax++; } } if(tempMax == maxCount) { maxCount = tempMax; maxTeams++; } else if(tempMax > maxCount) { maxCount = tempMax; maxTeams = 1; } } } vector<int> v(2); v[0] = maxCount; v[1] = maxTeams; return v; } | cs |
문제 설명을 간단히 하면 배열의 한 행이 한팀을 나타내고 열은 각 문제 번호에 해당한다.
0은 그 번호를 풀지 못한다는 뜻이고 1은 그 번호를 풀수 있다는 말이다.
결론적으로 두팀씩 짝을 진다고 할 때 첫번째 줄에는 가장 많이 풀 수 있는 번호의 수, 두번째 줄에는 가장 많이 풀 수 있는 팀의 수를 나타내면 된다.
알고리즘은 간단하다. string 변수를 두개 만들어서 각각 비교를 하며 둘 중 하나라도 1이 있으면 tempMax값을 증가시킨다. 그리고 maxCount랑 비교를 하는데 그 이유는 같은 max값을 가진 팀이 몇팀인지를 알아내기 위해서이다.
하지만 기존에 maxCount보다 더 큰 tempMax가 들어오면 지금까지 max를 가진 팀을 센것이 의미없어지기 때문에 maxTeams를 1로 다시 초기화한다.
'알고리즘 > Hackerrank' 카테고리의 다른 글
Hackerrank - Taum and B'day (0) | 2018.10.21 |
---|---|
Jumping on the Clouds (0) | 2018.10.11 |
Equalize the Array (0) | 2018.10.10 |
A very big sum (0) | 2018.10.09 |
Compare the Triplets (0) | 2018.10.09 |