백준 10866번 바로가기

백준 10845번과 매우 유사한 문제. 세부 조건만 잘 따져주면 쉽게 해결 가능하다.

나의 풀이

n,*l=open(0)
a=[]

for i in l:
  if (cmd:=(q:=i.split())[0]) == 'push': a.append(q[1])
  elif cmd == 'pop': print(a.pop(0) if a else -1)
  elif cmd == 'size': print(len(a))
  elif cmd == 'empty': print(0 if a else 1)
  elif cmd == 'front': print(a[0] if a else -1)
  elif cmd == 'back': print(a[-1] if a else -1)

고수의 풀이

s=[];p=print
for o in [*open(0)][1:]:
 match o[1]:
  case "u":s.append(o.split()[1])
  case "o":p(s.pop(0)if s else-1)
  case "i":p(len(s))
  case "m":p(0 if s else 1)
  case "r":p(s[0]if s else-1)
  case "a":p(s[-1]if s else-1)

출처

CODE REVIEW

  1. match-case문을 처음 봤는데 case을 나누고 해당하는 case마다 코드를 실행하는 방식이다. if else 조건문과 비슷하지만 코드가 한결 간단해진다.
  2. 처음에는 input()이용해서 풀었는데 시간초과 뜨길래 open(0)으로 받는 방식으로 바꾸었다. 백준은 이런 시간 초과 문제가 은근 신경쓰이게 한단 말이지…ㅂㅇㅂ
  3. 이번에도 바다코끼리 연산자를 편리하게 이용했다. 다음에 한번 이 연산자에 대한 포스팅을 올려봐야겠다.