ধরুন আমাদের একটি অসীম সমতল আছে, একটি রোবট প্রাথমিকভাবে অবস্থানে (0, 0) দাঁড়িয়ে আছে এবং উত্তর দিকে মুখ করে। রোবট তিনটি নির্দেশাবলীর একটি পেতে পারে -
-
G - সোজা 1 ইউনিটে যান;
-
L − 90 ডিগ্রি বাম দিকে ঘুরুন;
-
R − 90 ডিগ্রি ডান দিকে ঘুরুন।
রোবট প্রদত্ত নির্দেশাবলী ক্রমানুসারে সম্পাদন করে, নির্দেশাবলী চিরকালের জন্য পুনরাবৃত্তি হয়। আমাদের পরীক্ষা করতে হবে প্লেনে এমন একটি বৃত্ত আছে কি না যাতে রোবট কখনো বৃত্ত ছেড়ে না যায়। সুতরাং যদি ইনপুটটি [GGLLGG] এর মত হয়, তাহলে উত্তরটি সত্য হবে। (0,0) থেকে (0,2), এটি চিরতরে লুপ হবে, তাই এটি একটি বন্ধ পথ, এবং উত্তরটি সত্য৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি অ্যারে dir তৈরি করুন :=[[0,1], [1,0], [0,-1], [-1,0]]
-
একটি জোড়া তাপমাত্রা তৈরি করুন এবং প্রাথমিকভাবে এটি (0, 0) এবং k :=0
-
i এর জন্য 0 থেকে s আকারের সীমার মধ্যে
-
যদি s[i] হয় G, তাহলে
-
temp :=(dir[k, 0], dir[k, 1])
-
-
অন্যথায় যখন s[i] L হয়, তখন k :=(k + 1) mod 4, অন্যথায় k :=(k - 1) mod 4
-
-
temp (0, 0) এবং k> 0 না হলে মিথ্যা হলে, অন্যথায় সত্য
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; class Solution { public: bool isRobotBounded(string s) { pair <int, int> temp({0,0}); int k = 0; for(int i = 0; i < s.size(); i++){ if(s[i] == 'G'){ temp.first += dir[k][0]; temp.second += dir[k][1]; }else if(s[i] == 'L'){ k = (k + 1) % 4; }else{ k = ((k - 1) + 4) % 4; } } return temp.first == 0 && temp.second == 0 || k > 0; } }; main(){ Solution ob; cout << (ob.isRobotBounded("GGLLGG")); }
ইনপুট
"GGLLGG"
আউটপুট
1