[백준] 10828_스택, 10845_큐, 10866_덱 (python)

juyeon·2022년 7월 1일
0

코딩테스트(python)

목록 보기
17/22

백준 10828번. 스택(stack)

문제

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

나의 풀이

import sys
input = sys.stdin.readline
stack = []
n = int(input())
for i in range(n):
    command = input().split()
    #0번째 자리에 원소가 들어온다
    if command[0] == 'push':
        stack.append(command[1])
        
    elif command[0] == 'pop':
        if len(stack) == 0:
            print(-1)
        else:
        	#'스택에서 가장 위에 있는' = 가장 마지막에 넣은
            print(stack.pop())
            
    elif command[0] == 'size':
        print(len(stack))
        
    elif command[0] == 'empty':
        if len(stack) == 0:
            print(1)
        else:
            print(0)
    elif command[0] == 'top':
        if len(stack) == 0:
            print(-1)
        else:
        	#가장 늦게 들어온, 즉 맨 위 원소가 출력된다
            print(stack[-1])

: 1 2 3 4 5 <-->
긴 물병과 같다.

백준 10845번. 큐(queue)

문제

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다

나의 풀이

import sys
input = sys.stdin.readline
queue = []
n = int(input())
for i in range(n):
    command = input().split()
    #0번째 자리에 원소가 들어온다
    #index를 지정해야 하기 때문에, append가 아닌 insert 사용
    if command[0] == 'push':
        queue.insert(0, command[1])
        
    elif command[0] == 'pop':
        if len(queue) == 0:
            print(-1)
        else:
            print(queue.pop())
            
    elif command[0] == 'size':
        print(len(queue))
        
    elif command[0] == 'empty':
        if len(queue) == 0:
            print(1)
        else:
            print(0)
    elif command[0] == 'front':
        if len(queue) == 0:
            print(-1)
        else:
        	#가장 먼저 들어온, 즉 맨 끝 원소가 출력된다
            print(queue[-1])
        
    elif command[0] == 'back':
        if len(queue) == 0:
            print(-1)
        else:
        	#가장 늦게 들어온, 즉 0번째 인덱스 원소가 출력된다
            print(queue[0])

: --> 5 4 3 2 1 --> 이렇게 들어오고 나간다.
마치 구멍 뚫린 터널과 같다!

백준 10866번. 덱(deque)

문제

  • push_front X: 정수 X를 덱의 앞에 넣는다.
  • push_back X: 정수 X를 덱의 뒤에 넣는다.
  • pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 덱에 들어있는 정수의 개수를 출력한다.
  • empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.
  • front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.

나의 풀이

  1. 에러남..왜..? -> 맞았다!
from collections import deque
import sys
input = sys.stdin.readline

n = int(input())
deque_ = deque()
for i in range(n):
    command = input().split()
    if command[0] == 'push_front':
        deque_.append(command[1])
        
    elif command[0] == 'push_back':
        deque_.appendleft(command[1])
        
    elif command[0] == 'pop_front':
        if len(deque_) == 0:
            print(-1)
        else:
            print(deque_.pop())
            
    elif command[0] == 'pop_back':
        if len(deque_) == 0:
            print(-1)
        else:
            print(deque_.popleft())
            
    elif command[0] == 'size':
        print(len(deque_))
        
    elif command[0] == 'empty':
        if len(deque_) == 0:
            print(1)
        else:
            print(0)
            
    elif command[0] == 'front':
        if len(deque_) == 0:
            print(-1)
        else:
            print(deque_[-1])
        
    elif command[0] == 'back':
        if len(deque_) == 0:
            print(-1)
        else:
            print(deque_[0])

: NZEC Exit code가 0이 아님 BrokenPipe
: NZEC는 Non Zero Exit Code의 약자로 프로그램의 exit code가 0이 아닌 경우를 의미합니다. 많은 프로그램과 운영체제는 정상 종료일때만 0을 리턴합니다.
-> 오타였음 ㅠ 오타 수정하니 맞음..

#1
print(d[0])
d.popleft()

#2
print(d.popleft())

#둘다..같은 값을 프린트 하고 & popleft 하는 듯!
#차이점은 아직은 모르겠다ㅠ
profile
내 인생의 주연

0개의 댓글