Պահունակ

Պահունակը ալգորիթմներում ամենատարածված տվյալային կառուցվածքներից մեկն է։ Այն գործում է «վերջինը մտավ, առաջինը դուրս եկավ» սկզբունքով. վերջին ավելացված տարրը նախնահերթությամբ է հեռացվում։ Սա կարելի է համեմատել ափսեների դեզի հետ, որտեղ միայն վերևի ափսեն է հասանելի հեռացման համար, մինչև որ դրա վրայի բոլոր մյուս ափսեները հեռացվեն։
Պահունակները կարող են օգտագործվել իրական կյանքի բազմաթիվ իրավիճակներում։ Երբ դիտում եք կայքեր վեբ զննարկչում, «հետ» (back) կոճակը սեղմելով, դուք վերադառնում եք նախորդ էջ։ Էջերի պատմությունը կարելի է պահպանել պահունակում, և «հետ» կոճակը սեղմելու պահին վերադառնում եք դեզի վերևի էջին։ Եթե էլի եք սեղմում «հետ» կոճակը, ապա պահունակի վերևից այդ էջը հեռացվում է, և դուք տեսնում եք նախորդը։
notion image
Պահունակի իրականացման մի քանի տարբերակներ υπάρχουν Python-ում։
  1. Օգտագործելով list – պահունակի վերևը կլինի list-ի վերջին տարրը։ Կարող ենք ավելացնել append-ով, հեռացնել pop-ով և ստանալ վերևի տարրը [-1]-ով։
  1. Օգտագործելով deque գրադարանային collections-ից – հնարավորություն է տալիս ավելացնել և հեռացնել տարրեր ինչպես սկզբից, այնպես էլ վերջից։
  1. LifoQueue queue գրադարանից – սա էլ հենց վերջինը մտավ (first-in), առաջինը դուրս եկավ (last-out) հերթի տարբերակն է, ինչը համապատասխանում է պահունակի աշխատանքին։
from queue import LifoQueue
stack = LifoQueue()

# push (ավելացում)
stack.put(1)
stack.put(2)
stack.put(3)

# pop (հեռացում)
print(stack.get())      # տպում է 3
print(stack.get())      # տպում է 2

# peek (դիտել վերևի տարրը)
print(stack.queue[-1])  # տպում է 1
print(stack.empty())    # ստուգել, արդյոք դատարկ է -> տպում է False
# Using a simple list
stack = []

# push (ավելացում)
stack.append(1)
stack.append(2)
stack.append(3)

# pop (հեռացում)
print(stack.pop())      # տպում է 3
print(stack.pop())      # տպում է 2

# peek (դիտել վերևի տարրը)
print(stack[-1])        # տպում է 1
print(len(stack) == 0)  # ստուգել, արդյոք դատարկ է -> տպում է False

Առաջադրանք: Ստուգել փակագծերի հաջորդականության վավերությունը

Տրված է մաթեմատիկական արտահայտության փակագծերի հաջորդականություն (օրինակ (()())), որի վավեր լինելը պետք է ստուգել։ Փակագծերի հաջորդականությունը վավեր է, եթե յուրաքանչյուր բացվող փակագիծ ունի համապատասխան փակող փակագիծ, և չկան ավելորդ փակագծեր (բացվող կամ փակվող)։

Մուտք

Մուտքի միակ տողը պարունակում է մեկ տող b (1 ≤ |b| ≤ ), որը ներկայացնում է փակագծերի հաջորդականությունը։

Ելք

Ծրագիրը պետք է տպի Yes, եթե փակագծերի հաջորդականությունը վավեր է, հակառակ դեպքում՝ No:

Օրինակներ

Мուտք
Ելք
()()
Yes
())()(
No
((()())())
Yes
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue