본문 바로가기

알고리즘/Hackerrank

ACM ICPC Team

반응형





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