python algorithm

λ°±μ€€ 10828번: μŠ€νƒ

jsleee 2024. 5. 18. 23:34

https://www.acmicpc.net/problem/10828

πŸ’‘λ¬Έμ œ

μ •μˆ˜λ₯Ό μ €μž₯ν•˜λŠ” μŠ€νƒμ„ κ΅¬ν˜„ν•œ λ‹€μŒ, μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” λͺ…령을 μ²˜λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λͺ…령은 총 λ‹€μ„― 가지이닀.

  • push X: μ •μˆ˜ Xλ₯Ό μŠ€νƒμ— λ„£λŠ” 연산이닀.
  • pop: μŠ€νƒμ—μ„œ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό λΉΌκ³ , κ·Έ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  • size: μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
  • empty: μŠ€νƒμ΄ λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.
  • top: μŠ€νƒμ˜ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

μž…λ ₯

첫째 쀄에 μ£Όμ–΄μ§€λŠ” λͺ…λ Ήμ˜ 수 N (1 ≤ N ≤ 10,000)이 μ£Όμ–΄μ§„λ‹€. λ‘˜μ§Έ 쀄뢀터 N개의 μ€„μ—λŠ” λͺ…령이 ν•˜λ‚˜μ”© μ£Όμ–΄μ§„λ‹€. μ£Όμ–΄μ§€λŠ” μ •μˆ˜λŠ” 1보닀 ν¬κ±°λ‚˜ κ°™κ³ , 100,000보닀 μž‘κ±°λ‚˜ κ°™λ‹€. λ¬Έμ œμ— λ‚˜μ™€μžˆμ§€ μ•Šμ€ λͺ…령이 μ£Όμ–΄μ§€λŠ” κ²½μš°λŠ” μ—†λ‹€.

좜λ ₯

좜λ ₯ν•΄μ•Όν•˜λŠ” λͺ…령이 μ£Όμ–΄μ§ˆ λ•Œλ§ˆλ‹€, ν•œ 쀄에 ν•˜λ‚˜μ”© 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯

14

push 1

push 2

top

size

empty

pop

pop

pop

size

empty

pop

push 3

empty

top

 

예제 좜λ ₯ 

2

2

0

2

1

-1

0

1

-1

0

3

 

ν•΄μ„€

κΈ°μ‘΄μ½”λ“œ (μ‹œκ°„μ΄ˆκ³Ό)

N = int(input())

stack = []

for i in range(N):  
  func = input() 
  parts = func.split()  

  if parts[0] == "push":
    stack.append(int(parts[1]))

  elif parts[0] == "pop":
    if len(stack) == 0:
      print(-1)
    else:
      print(stack[-1])
      stack.pop()

  elif parts[0] == "size":
    print(len(stack))

  elif parts[0] == "empty":
    if len(stack) == 0:
      print(1)
    else:
      print(0)

  else:  #top
    if len(stack) == 0:
      print(-1)
    else:
      print(stack[-1])
πŸ’‘ 반볡문으둜 μž…λ ₯을 μ—¬λŸ¬λ²ˆ λ°›λŠ” κ²½μš°μ— input() μœΌλ‘œ μž…λ ₯을 λ°›μœΌλ©΄ μ‹œκ°„μ΄ˆκ³Όκ°€ λ°œμƒν•  수 μžˆλ‹€.
이에 sys.stdin.readline()을 μ΄μš©ν•˜μ—¬ μž…λ ₯을 λ°›μ•„μ•Ό ν•œλ‹€.

 

μˆ˜μ •μ½”λ“œ

import sys 

N = int(input())

stack = []

for i in range(N):
  parts = sys.stdin.readline().split()

  if parts[0] == "push":
    stack.append(int(parts[1]))

  elif parts[0] == "pop":
    if len(stack) == 0:
      print(-1)
    else:
      print(stack[-1])
      stack.pop()

  elif parts[0] == "size":
    print(len(stack))

  elif parts[0] == "empty":
    if len(stack) == 0:
      print(1)
    else:
      print(0)

  else:
    if len(stack) == 0:
      print(-1)
    else:
      print(stack[-1])