스택을 풀기 전, 스택이 무엇인지 짧게 배우고, 이 부분을 코드로 구현해보자. (구글링은 사랑입니다. 구글링 없이 자신이 직접 바로 코드를 노베이스로 짤 수 있다면, 아마 당신은 천재일 것이다.)
스택이란 일종의 "그릇"이다. 그릇에는 데이터가 저장되어 있고, push나 pop을 이용해 데이터를 삽입하거나 뺄 수 있게 된다. 또한 가장 마지막에 들어간 데이터가 가장 처음 나오는 성질을 가지고 있는 자료구조이다.
재귀적인 함수, 알고리즘에 사용되며, 웹 브라우저 방문 기록등에도 사용이 된다. 삽입 및 삭제에 O(1), 탐색에 O(n)이 걸리는 시간 복잡도를 가지고 있다.
이런 자료들을 로우적인 부분부터 제어하고 싶으면 c언어를 써주면 된다. 그러나 난 백준을 파이썬 언어로 설정해두고 풀어왔으니, 일단은 파이썬으로 풀 것이다. 추후에 따로 카테고리를 만들어서 자료구조에 대한 것만 다룰 생각이다.
https://youtu.be/_8s0Qd4N4PU?si=O5-YZ07cUsuDDv4h
관련 영상을 이걸 참고하면 된다. 이 밖에도 많은 영상이 있으니 참고하자.
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
push X: 정수 X를 스택에 넣는 연산이다.pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.size: 스택에 들어있는 정수의 개수를 출력한다.empty: 스택이 비어있으면 1, 아니면 0을 출력한다.top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
답:
import sys #시스템 라인을 가져오기위한 import문
n = int(sys.stdin.readline()) #input의 역할하는 문법, 속도는 제일 빠르다.
#시스템 라인은 그냥 쓰면 input처럼 문자열로 받게 된다.
stack=[] #스택이라는 빈 배열을 만들어서 리스트의 역할을 해준다.
for i in range(n):
command = sys.stdin.readline().split() #split는 쪼개주는 역할을 한다.
if command[0]=='push': #경우의 수에 따라서 if문 돌리기
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])
파이썬의 강점은 직관성이라고 볼 수 있다. c언어처럼 따로 스택을 지원하지는 않기에 리스트를 이용하고 자체 함수를 이용해서 만들게 된다. (근데 이게 더 쉽고 직관적...)
어차피 command는 문자열이라고 if문을 이용해서 push, pop 등.. 문자열과 같은지 확인하고, 문제에서 하라는대로 파이썬 자체 함수를 이용해서 프린트해주면 된다.
'백준 (코테)' 카테고리의 다른 글
19. 괄호 (9012) (0) | 2024.09.05 |
---|---|
18. 단어 뒤집기(9093) (0) | 2024.09.04 |
16. [12단계] 제목: 브루트 포스 (5~6챕터) (0) | 2024.08.29 |
15. [12단계] 제목: 브루트 포스 (3~4챕터) (2) | 2024.08.28 |
14. [12단계] 제목: 브루트 포스 (1~2챕터) (1) | 2024.08.27 |