সমস্যা বিবরণ
N আকারের একটি অ্যারে দেওয়া আছে যার প্রতিটি এলিমেন্ট হয় ১ বা ০। সব এলিমেন্টকে শূন্য করতে ন্যূনতম কতগুলো অপারেশন দরকার তা বের করতে হবে। নিচের অপারেশনগুলো করা যাবে:
যদি কোনো এলিমেন্ট ১ হয়, তাহলে সেটিকে ০ করতে পারেন, এরপর:
- যদি পরবর্তী 연속 এলিমেন্ট ১ হয়, তবে সেটিও স্বয়ংক্রিয়ভাবে ০ হয়ে যাবে
- যদি পরবর্তী এলিমেন্ট ইতিমধ্যে ০ হয়, তবে কিছুই হবে না
যদি arr[] = {1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1} হয়, তবে ৪টি অপারেশন দরকার
এলগরিদম
1. যদি বর্তমান এলিমেন্ট ১ হয়, তবে কাউন্ট বাড়ান এবং পরবর্তী ০ খুঁজুন কারণ সব kontinuous ১-গুলো স্বয়ংক্রিয়ভাবে ০ হয়ে যাবে 2. চূড়ান্ত কাউন্ট রিটার্ন করুন
উদাহরণ কোড
#include <iostream>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
int performMinOperation(int *arr, int n) {
int i, cnt = 0;
for (i = 0; i < n; ++i) {
if (arr[i] == 1) {
int j;
for (j = i + 1; j < n; ++j) {
if (arr[j] == 0) {
break;
}
}
i = j - 1;
++cnt;
}
}
return cnt;
}
int main() {
int arr[] = {1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1};
cout << "Minimum required operations = " << performMinOperation(arr, SIZE(arr)) << endl;
return 0;
}
আউটপুট
প্রোগ্রাম কম্পাইল ও এক্সিকিউট করলে নিচের আউটপুট পাওয়া যাবে:
Minimum required operations = 4