मान लीजिए कि हमारे पास एक अनंत विमान है, एक रोबोट शुरू में स्थिति (0, 0) पर खड़ा है और उत्तर की ओर उन्मुख है। रोबोट तीन निर्देशों में से एक प्राप्त कर सकता है -
-
जी - सीधे 1 इकाई जाओ;
-
एल - 90 डिग्री बाईं ओर मुड़ें;
-
आर - 90 डिग्री दाहिनी ओर मुड़ें।
रोबोट दिए गए निर्देशों को क्रम से करता है, निर्देश हमेशा के लिए दोहराए जाते हैं। हमें यह जांचना है कि क्या विमान में एक वृत्त मौजूद है जैसे कि रोबोट कभी भी वृत्त को नहीं छोड़ता है। तो अगर इनपुट [GGLLGG] जैसा है, तो जवाब सही होगा। (0,0) से (0,2) तक, यह हमेशा के लिए लूप हो जाएगा, इसलिए यह एक बंद पथ है, और उत्तर सत्य है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक सरणी बनाएं dir:=[[0,1], [1,0], [0,-1], [-1,0]]
-
एक जोड़ी अस्थायी बनाएं, और प्रारंभ में यह (0, 0) और k:=0
. है -
मेरे लिए 0 से s के आकार की सीमा में
-
अगर s[i] G है, तो
-
अस्थायी:=(दिर [के, 0], डीआईआर [के, 1])
-
-
अन्यथा जब s[i] L है, तब k :=(k + 1) mod 4, अन्यथा k :=(k - 1) mod 4
-
-
यदि असत्य है जब अस्थायी (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