मान लीजिए कि हमारे पास ऑप्स नामक स्ट्रिंग की एक सूची है, जहां प्रत्येक तत्व नीचे दिए गए इन कार्यों में से कोई एक है -
- एक गैर-ऋणात्मक पूर्णांक मान जिसे एक स्टैक में धकेल दिया जाएगा
- "POP" स्टैक से सबसे ऊपरी तत्व को हटाने के लिए
- "DUP" शीर्ष तत्व को फिर से स्टैक में डालने के लिए, इसे डुप्लिकेट बनाने के लिए
- "+" शीर्ष दो तत्वों को बाहर निकालने के लिए और योग मान को पुश करने के लिए
- "-" शीर्ष दो तत्वों को पॉप आउट करने के लिए और (शीर्ष तत्व - तत्व शीर्ष के ठीक नीचे) के परिणाम को पुश करने के लिए
इसलिए हमें इन सभी ऑपरेशनों को लागू करने के बाद स्टैक में शीर्ष प्रेरक तत्व को खोजना होगा। अगर कुछ ऑपरेशन मान्य नहीं हैं तो -1 लौटें।
इसलिए, यदि इनपुट ops =["5", "2", "POP", "DUP", "3", "+", "15", "-"] जैसा है, तो आउटपुट 7 होगा क्योंकि प्रारंभ में पहले दो ऑपरेशनों का उपयोग करते हुए, 5 और 2 डालें ताकि स्टैक [5, 2] जैसा हो, फिर एक पॉप करें ताकि वर्तमान स्टैक [5] जैसा हो। उसके बाद डीयूपी के लिए, 5 को डुप्लिकेट किया जाएगा, इसलिए स्टैक [5, 5] जैसा है, फिर 3 [5, 5, 3] जोड़ें, फिर अतिरिक्त ऑपरेशन के लिए यह [5, 8] होगा, फिर 15 डालें, इसलिए [5, 8, 15] उसके बाद घटाव ऑपरेशन के लिए स्टैक [5, (15-8)] =[5, 7] होगा। तो सबसे ऊपर वाला तत्व 7 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- स्टैक:=एक नया स्टैक
- ऑप्स में प्रत्येक i के लिए, करते हैं
- यदि i एक संख्या है, तो
- मुझे ढेर में धकेलें
- अन्यथा जब स्टैक का आकार>=1 और i "POP" हो, तो
- स्टैक से पॉप टॉप एलिमेंट
- अन्यथा जब स्टैक का आकार>=1 और i "DUP" के समान हो, तो
- स्टैक से पी में सबसे ऊपर वाले तत्व को पॉप करें
- और p दो बार डालें
- अन्यथा जब स्टैक का आकार>=2 और i "+" के समान हो, तो
- स्टैक से शीर्षतम तत्व को एक में पॉप करें
- स्टैक से सबसे ऊपरी तत्व को b में पॉप करें
- पुश (a + b) स्टैक में
- अन्यथा जब स्टैक का आकार>=2 और i "-" के समान हो, तो
- स्टैक से शीर्षतम तत्व को एक में पॉप करें
- स्टैक से सबसे ऊपरी तत्व को b में पॉप करें
- पुश (a - b) स्टैक में
- अन्यथा,
- वापसी -1
- यदि i एक संख्या है, तो
- स्टैक से शीर्ष तत्व लौटाएं
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(ops): stack = [] for i in ops: if i.isnumeric() == True: stack.append(int(i)) elif len(stack) >= 1 and i == "POP": stack.pop() elif len(stack) >= 1 and i == "DUP": p = stack.pop() stack.append(p) stack.append(p) elif len(stack) >= 2 and i == "+": a = stack.pop() b = stack.pop() stack.append(a + b) elif len(stack) >= 2 and i == "-": a = stack.pop() b = stack.pop() stack.append(a - b) else: return -1 return stack.pop() ops = ["5", "2", "POP", "DUP", "3", "+", "15", "-"] print(solve(ops))
इनपुट
["5", "2", "POP", "DUP", "3", "+", "15", "-"]
आउटपुट
7