ধরুন আমাদের কাছে অপস নামক স্ট্রিং এর একটি তালিকা আছে যেখানে প্রতিটি উপাদান নিচের মত এই অপারেশনগুলির যে কোনো একটি।
- একটি অ-নেতিবাচক পূর্ণসংখ্যা মান যা একটি স্ট্যাকের মধ্যে পুশ করা হবে
- স্ট্যাক থেকে শীর্ষস্থানীয় উপাদান মুছে ফেলার জন্য "POP"
- স্ট্যাকের মধ্যে আবার শীর্ষ উপাদান সন্নিবেশ করার জন্য, এটিকে সদৃশ করতে "DUP"
- "+" উপরের দুটি উপাদান পপ আউট করতে এবং যোগফলের মান পুশ করতে
- "-" উপরের দুটি উপাদানকে পপ আউট করতে এবং (শীর্ষ উপাদান - শীর্ষের ঠিক নীচে উপাদান) এর ফলাফলটি পুশ করতে
সুতরাং আমাদের এই সমস্ত ক্রিয়াকলাপ প্রয়োগ করার পরে স্ট্যাকের শীর্ষ মোটর উপাদানটি খুঁজে বের করতে হবে। কিছু অপারেশন বৈধ না হলে -1 ফেরত দিন।
সুতরাং, যদি ইনপুট হয় ops =["5", "2", "POP", "DUP", "3", "+", "15", "-"], তাহলে আউটপুট হবে 7 কারণ প্রাথমিকভাবে প্রথম দুটি অপারেশন ব্যবহার করে, 5 এবং 2 সন্নিবেশ করান যাতে স্ট্যাকটি [5, 2] এর মতো হয়, তারপর একটি পপ করুন যাতে বর্তমান স্ট্যাকটি [5] এর মতো হয়। এর পরে DUP-এর জন্য, 5টি সদৃশ হবে, তাই স্ট্যাকটি [5, 5] এর মতো, তারপর 3 যোগ করুন [5, 5, 3], তারপর যোগ করার জন্য এটি হবে [5, 8], তারপর 15 ঢোকান, তাই [5, 8, 15] এর পরে বিয়োগ অপারেশনের জন্য স্ট্যাক হবে [5, (15-8)] =[5, 7]। তাই শীর্ষস্থানীয় উপাদান হল 7।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- স্ট্যাক :=একটি নতুন স্ট্যাক
- প্রত্যেক i অপারেশনের জন্য, করুন
- যদি আমি একটি সংখ্যা হয়, তাহলে
- আমাকে স্ট্যাকের মধ্যে ঠেলে
- অন্যথায় যখন স্ট্যাকের সাইজ>=1 এবং i "POP", তখন
- স্ট্যাক থেকে পপ শীর্ষ উপাদান
- অন্যথায় যখন স্ট্যাকের আকার>=1 এবং i "DUP" এর মতো হয়, তখন
- স্ট্যাক থেকে পি-এ পপ টপ-মোস্ট এলিমেন্ট
- এবং p দুইবার ঢোকান
- অন্যথায় যখন স্ট্যাকের আকার>=2 এবং i "+" এর মত হয়, তাহলে
- স্ট্যাক থেকে একটি এ পপ টপ-মোস্ট উপাদান
- স্ট্যাক থেকে বি-তে শীর্ষ-সর্বাধিক উপাদান পপ করুন
- স্ট্যাকে (a + b) পুশ করুন
- অন্যথায় যখন স্ট্যাকের সাইজ>=2 এবং i "-" এর মত হয় তখন
- স্ট্যাক থেকে একটি এ পপ টপ-মোস্ট উপাদান
- স্ট্যাক থেকে বি-তে শীর্ষ-সর্বাধিক উপাদান পপ করুন
- স্ট্যাকে (a - b) পুশ করুন
- অন্যথায়,
- রিটার্ন -1
- যদি আমি একটি সংখ্যা হয়, তাহলে
- স্ট্যাক থেকে শীর্ষ উপাদান ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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