성장일기

[python] 백준 18258 - 큐 2 본문

알고리즘 문제

[python] 백준 18258 - 큐 2

김몽몽 2021. 12. 23. 14:38

리스트로 풀다가 시간초과ㅜㅜ

import sys
n=int(sys.stdin.readline().rstrip())
li=[]

for i in range(n):
    a=sys.stdin.readline().rstrip()
    if a.startswith('push'):  #push 뒤의 숫자를 넣는다
        li.append(int(a.split()[1]))
    elif a=='pop':  
        if li==[]:  #리스트가 비어있으면 -1 출력
            print(-1)
        else:
            print(li[0])  #아니면 pop연산
            del li[0]
    elif a=='size':
        print(len(li))
    elif a=='empty':
        if li==[]:
            print(1)  #비었다면 1 아니면 0
        else:
            print(0)
    elif a=='front':  #처음
        if li==[]:
            print(-1)
        else:
            print(li[0])
    elif a=='back':  #끝
        if li==[]:
            print(-1)
        else:
            print(li[-1])

처음 짜서 제출한 코드 → 시간초과

겹치는 if문이 많아서 그런가 싶어서 묶고 다시 작성했다

import sys
n=int(sys.stdin.readline().rstrip())
li=[]

for i in range(n):
    a=sys.stdin.readline().rstrip()
    if a.startswith('push'):
        li.append(int(a.split()[1]))
    else:
        if a=='empty':
            if li==[]:
                print(1)
            else:
                print(0)
        elif a=='size':
            print(len(li))
        else:
            if li==[]:  #공통부분 묶기
                print(-1)
            else:
                if a=='pop':
                        print(li[0])
                        del li[0]
                elif a=='front':
                        print(li[0])
                elif a=='back':
                        print(li[-1])

하지만 여전히 시간초과였다 😥

리스트가 아니라 다른 자료형을 쓰면 괜찮을까 싶어서 다시 시도해보았다.

import sys
from collections import deque
q=deque()
n=int(sys.stdin.readline().rstrip())

for i in range(n):
    a=sys.stdin.readline().rstrip()
    if a.startswith('push'):
        q.append(int(a.split()[1]))
    else:
        if a=='empty':
            if len(q)==0:
                print(1)
            else:
                print(0)
        elif a=='size':
            print(len(q))
        else:
            if len(q)==0:
                print(-1)
            else:
                if a=='pop':
                        print(q[0])
                        del q[0]
                elif a=='front':
                        print(q[0])
                elif a=='back':
                        print(q[-1])

통과🎉🎉🎉

데크를 썼다

데크는 양끝의 append, pop이 빠른 자료구조다.

 

아직까지는 코드의 효율성에 대해 제대로 인지하지 못하고 있는것 같다

공부를 열심히해야지 화이팅

'알고리즘 문제' 카테고리의 다른 글

[python] 백준 1927 - 최소 힙  (0) 2021.12.23
백준 11279 - 최대 힙  (0) 2021.12.23
[python] 백준 10773 - 제로  (0) 2021.12.23
[python] 백준 10828 - 스택  (0) 2021.12.23
😶첫 시작  (0) 2021.12.23