ধরুন আপনি একটি অনন্ত সংখ্যা রেখায় ০ অবস্থানে দাঁড়িয়ে আছেন। এখন লক্ষ্য অবস্থান target-এ একটি গোল রয়েছে। এখানে প্রতিটি চলে আপনি হয় বামে বা ডানে যেতে পারেন। n-তম চলে (১ থেকে শুরু করে) আপনি n ধাপ নেবেন। আমাদের গন্তব্যে পৌঁছাতে প্রয়োজনীয় ন্যূনতম ধাপের সংখ্যা বের করতে হবে। তাই যদি ইনপুট হয় target = 3, তবে আমাদের ২ ধাপ দরকার। ০ থেকে ১, ১ থেকে ৩।
এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব −
- target := |target|, cnt := ০
- যখন target > ০,
- cnt ১ বৃদ্ধি করুন
- target := target – cnt
- যদি target সম হয়, তবে cnt ফেরত দিন, অন্যথায় cnt + 1 + cnt mod 2
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন −
উদাহরণ
#include <bits/stdc++.h> using namespace std; class Solution { public: int reachNumber(int target) { target = abs(target); int cnt = 0; while(target > 0){ target -= ++cnt; } return target % 2 == 0? cnt : cnt + 1 + cnt % 2; } }; main(){ Solution ob; cout << (ob.reachNumber(3)); }ইনপুট
3
আউটপুট
2