안녕하세요. 오늘은 선물을 나누어줄 거예요.
https://www.acmicpc.net/problem/30406
(0,3), (1,2)는 XOR했을 때 3이 나옵니다.
(1,3), (0,2)는 XOR했을 때 2가 나옵니다.
(0,1),(2,3)은 XOR했을 때 1이 나옵니다.
두 수가 같으면 XOR했을 때 0이 나옵니다.
순서대로 없애주면 됩니다.
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
int N, i, x, num[4] = { 0 }, ans = 0;
cin >> N;
for (i = 0; i < N; i++)
{
cin >> x;
num[x]++;
}
int mn = min(num[0], num[3]);
ans += mn * 3;
num[0] -= mn;
num[3] -= mn;
mn = min(num[1], num[2]);
ans += mn * 3;
num[1] -= mn;
num[2] -= mn;
int a = -1, b = -1;
for (i = 0; i < 4; i++)
{
if (num[i])
{
if (a == -1) a = i;
else b = i;
}
}
if (b == -1) //두개가 아니면
cout << ans;
else
{
ans += min(num[a], num[b]) * (a ^ b);
cout << ans;
}
}
감사합니다.