মান লেযিয়ে একটি অনন্ত সমতল আছে, একটি রোবট প্রাথমিকভাবে (0, 0) অবস্থানে দাঁড়িয়ে আছেই এবং উত্তর দিকে মুখ করে। রোবট তিন ধরনের নির্দেশনা গ্রহণ করতে পারে -
G - সরাসরি ১ ইউনিট এগিয়ে যাওয়া;
L - বাম দিকে ৯০ ডিগ্রি ঘুরা;
R - ডান দিকে ৯০ ডিগ্রি ঘুরা।
রোবট নির্দেশনা অনুযায়ী কাজ করে, এবং নির্দেশনাগুলো অনন্তকাল ধরে রিপিট হয়। আমাদের যাচাই করতে হবে যে কি সমতলে এমন কোনো বৃত্ত وجود করে যেন রোবট সেটির বাইরে না যায়। উদাহরণস্বরূপ, ইনপুট "GGLLGG" হলে উত্তর হবে true। (0,0) থেকে (0,2) যাবে, তারপর এটি চিরকাল লুপ করবে, তাই এটি একটি বন্ধ পথ, এবং উত্তর true।
এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -
একটি dir অ্যারে তৈরি করুন := [[0,1], [1,0], [0,-1], [-1,0]]
একটি pair temp তৈরি করুন, প্রাথমিকভাবে (0, 0) এবং k := 0
i = 0 থেকে s.size()-1 পর্যন্ত লুপ চালান
যদি s[i] == 'G' হয়, তবে
temp := (dir[k][0], dir[k][1])
অন্যথায় যদি s[i] == 'L' হয়, তবে k := (k + 1) % 4, অন্যথায় k := (k - 1) % 4
যদি temp (0, 0) না হয় এবং k > 0 হয় তবে false রিটার্ন করুন, অন্যথায় true
উদাহরণ
নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -
#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