โจทย์: มีกลุ่มนักศึกษา n กลุ่ม ค่า 1 = คนเดี่ยว (ทำงานกับใครก็ได้) ค่า 2 = คู่ (ต้องอยู่ทีมเดียวกันหรือไม่อยู่ด้วยกัน) ที่ปรองษาต้องการทีมละ 3 คน หาจำนวนทีมสูงสุด
Input: A=[2,2,2,1,1,1,1] → Output: 3 (จับคู่ 2+1, 2+1, 2+1 เหลือ 1 คนเดี่ยวจับไม่ได้)
ขั้นตอนแก้
p := count of 1, q := count of 2 if p > q: return q + (p-q)/3 else if p < q: return p else: return p
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A) {
int p = 0, q = 0;
for (int a : A) {
if (a == 1) p++;
else q++;
}
if (p > q) return q + (p - q) / 3;
else if (p < q) return p;
else return p;
}
int main() {
vector<int> A = {2,2,2,1,1,1,1};
cout << solve(A) << endl;
}Input
{2,2,2,1,1,1,1}Output
3