সমস্যা বিবরণ
কিছু চিপস আছে, i-তম চিপস chips[i] পজিশনে আছে। দুটি অপারেশন করা যায় যেকোনো সংখ্যক বার:
- চিপস ২ ইউনিট বাম/ডানে সরানো (কস্ট ০)।
- চিপস ১ ইউনিট বাম/ডানে সরানো (কস্ট ১)।
সব চিপস একই পজিশনে আনতে ন্যূনতম কস্ট বের করতে হবে। ফাইনাল পজিশন যেকোনো হতে পারে।
উদাহরণ: chips = [2,2,2,3,3] → আউটপুট ২। চতুর্থ ও পঞ্চম চিপস পজিশন ২-এ আনতে হলে কস্ট ১+১=২।
সমাধানের ধাপসমূহ
- odd := 0, even := 0
- সব চিপসের জন্য: যদি chips[i] বিজোড় হয় odd++, অন্যথায় even++
- min(odd, even) রিটার্ন করুন।
কারণ: ২ ইউনিট মুভ ফ্রি, তাই সম/বিজোড় প্যারিটি পরিবর্তন করা যায় না। সব চিপস সম পজিশনে আনতে হলে বিজোড় চিপসগুলো ১ ইউনিট মুভ করতে হবে (কস্ট ১ প্রতিটি)। একইভাবে বিজোড় পজিশনে আনতে হলে সম চিপসগুলোর কস্ট। ন্যূনতম কস্ট হবে min(odd, even)।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int minCostToMoveChips(vector<int>& chips) {
int odd = 0, even = 0;
for (int i = 0; i < chips.size(); i++) {
if (chips[i] & 1) odd++;
else even++;
}
return min(odd, even);
}
};
int main() {
Solution ob;
vector<int> v1 = {2,2,2,3,3};
cout << ob.minCostToMoveChips(v1);
}
ইনপুট
[2,2,2,3,3]
আউটপুট
2