안녕하세요. 오늘은 학급 회장을 뽑을 거예요.
https://www.acmicpc.net/problem/2456
문제에 나온 그대로 구현해줍시다.
mx를 최댓값, p를 학급회장의 번호, cnt[i][j]를 i번 후보가 받은 j점의 개수, a,b,c를 현재 학급 회장 후보가 가진 1,2,3의 개수
라고 합시다.
i를 1부터 3까지 돌리면서
mx보다 cnt[i][1]+cnt[i][2]x2+cnt[i][3]x3이 더 크면 갱신
만약 mx와 같고 cnt[i][3]이 c보다 크거나 cnt[i][3]이 c와 같고 cnt[i][2]가 b보다 크면 갱신
만약 a,b,c가 cnt[i][1],cnt[i][2],cnt[i][3]과 같으면 p=0
아니면 그냥 넘겨주면 됩니다.
#include <iostream>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
int N, i, a, b, c, cnt[4][4] = { 0 };
cin >> N;
for (i = 1; i <= N; i++)
{
cin >> a >> b >> c;
cnt[1][a]++;
cnt[2][b]++;
cnt[3][c]++;
}
int mx = 0, p = -1;
a = 0, b = 0, c = 0;
for (i = 1; i <= 3; i++)
{
if (mx < cnt[i][1] + cnt[i][2] * 2 + cnt[i][3] * 3)
{
p = i;
mx = cnt[i][1] + cnt[i][2] * 2 + cnt[i][3] * 3;
a = cnt[i][1];
b = cnt[i][2];
c = cnt[i][3];
}
else if (mx == cnt[i][1] + cnt[i][2] * 2 + cnt[i][3] * 3)
{
if (cnt[i][3] > c || (cnt[i][3] == c && cnt[i][2] > b))
{
p = i;
mx = cnt[i][1] + cnt[i][2] * 2 + cnt[i][3] * 3;
a = cnt[i][1];
b = cnt[i][2];
c = cnt[i][3];
}
else if (cnt[i][3] == c && cnt[i][2] == b) p = 0;
}
}
cout << p << ' ' << mx;
}
감사합니다.