এই আর্টিকেলে, আমাদের একটি নাম্বার n দেওয়া আছে, এবং আমাদের দেয়া নাম্বার থেকে রিপিটেড ডিজিট বাদ দিতে হবে।
ইনপুট: x = 12224 আউটপুট: 124 ইনপুট: x = 124422 আউটপুট: 1242 ইনপুট: x = 11332 আউটপুট: 132
দেয়া সমস্যায়, আমরা সব ডিজিটের মধ্য দিয়ে যাব এবং রিপিটিং ডিজিটগুলো বাদ দিব।
সমাধানের পদ্ধতি
দেওয়া পদ্ধতিতে, আমরা n-এর সব ডিজিটের মধ্য দিয়ে ডানে থেকে বামে যাব। আমরা n-এর ডিজিটগুলো নব n-এর ১০ দিয়ে মড लेकर এবং তারপর n কে ১০ দিয়ে ভাগ করে। এখন আমাদের কারেন্ট ডিজিট হল n mod 10। আমরা এটিকে প্রিভিয়াস ডিজিটের সাথে চেক করব। যদি ডিজিটগুলো সমান হয়, তবে আমরা n ট্রাভার্স করব। যদি সেগুলো সমান না হয়, তবে আমরা এই ডিজিটকে আমাদের নতুন নাম্বারে যোগ করব, প্রিভিয়াস ডিজিটকে কারেন্টে চেঞ্জ করব, এবং লুপ চালিয়ে যাব।
উদাহরণ প্রোগ্রাম
#include <bits/stdc++.h>
#define MOD 1000000007
using namespace std;
int main() {
int n = 1222333232; // দেয়া n
int new_n = 0; // নতুন নাম্বার
int po = 1; // নতুন ডিজিটের জন্য টেনের গুণিতক হবে
int prev = -1; // প্রিভিয়াস ডিজিট
int curr; // কারেন্ট ডিজিট
while (n) {
curr = n % 10;
if (prev != curr) { // যদি ডিজিট রিপিট না হয়, তবে আমরা এই ব্লকে যাব
new_n = new_n + (curr * po); // আমরা নতুন ডিজিট new_n-এ যোগ করব
po *= 10;
prev = curr;
}
n /= 10;
}
cout << new_n << "\n";
return 0;
}
আউটপুট
123232
উপরোক্ত কোডের ব্যাখ্যা
উপরোক্ত পদ্ধতিতে, আমরা সিম্পলি n-এর ডিজিটগুলো ট্রাভার্স করছি এখন যখন আমাদের প্রিভিয়াস ডিজিট এবং কারেন্ট ডিজিট মেলে না, আমরা সেসব ডিজিট আমাদের নতুন নাম্বারে যোগ করি, এবং যেহেতু আমাদের ডিজিট যোগ হয়েছে, আমরা po-রও বাড়াচ্ছি যা আমাদের ডিজিটের পজিশন এর জন্য ব্যবহৃত হচ্ছে এখন যদি আমাদের কারেন্ট এবং প্রিভিয়াস ডিজিট মেলে - আমরা এই ব্লক রান করি না এবং লুপ চালিয়ে যাই যতক্ষণ না আমাদের n ০ হয়।
উপসংহার
এই আর্টিকেলে, আমরা একটি দেয়া নাম্বার থেকে রিপিটেড ডিজিট বাদ দেওয়ার সমস্যা সমাধান করেছি। আমরা এই সমস্যায় C++ প্রোগ্রাম এবং সম্পূর্ণ পদ্ধতি (নরমাল) শিখেছি যেগুলো দিয়ে আমরা এই সমস্যা সমাধান করেছি। আমরা একই প্রোগ্রাম অন্যান্য ল্যাঙ্গুয়েজে লিখতে পারি যেমন C, Java, Python এবং অন্যান্য ল্যাঙ্গুয়েজ। আশা করি আপনি এই আর্টিকেলটিকে সহায়ক খুঁজে পাবেন।