문제 28278번: 스택 2 첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000) 둘째 줄부터 N개 줄에 명령이 하나씩 주어진다. 출력을 요구하는 명령은 하나 이상 주어진다. www.acmicpc.net 풀이 (Python) import sys input=sys.stdin.readline n=int(input()) input_arr=[] stack=[] def is_empty(): if len(stack)==0: return True return False for _ in range(n): input_arr=list(map(int,input().split())) if input_arr[0]==1: stack.append(input_arr[1]) elif input_arr[0]==2: ..
자료구조 개념 자료구조란? 데이터를 구조적으로 활용하기 위해 표현하는 것을 말한다. 자료구조는 알고리즘 공부 전 필수적으로 알고 넘어가야 하는 부분이며, 알고리즘 문제의 대부분은 자료구조를 사용하여 풀어나가는데 이 때 어떤 자료구조를 사용하냐에 따라 문제의 난이도가 바뀔 수 있다. 자료구조의 목차를 오른쪽에 간략하게 표현해보았다. 자료구조에서는 이번 글에서 다루는 스택, 큐, 덱, 힙과 같이 지식이 필요한 부분들 이외에도 평상시에 배우는 언어에 기본적으로 존재 하는 배열(리스트)와 같이 기본적인 자료의 표현도 자료구조라고 할 수 있다. 알고리즘을 공부하기 위해서는 선행적으로 자료구조의 이해는 필 수 이다. 한 알고리즘에 한 가지의 자료구조 또는 여러 가지의 자료구조가 조합되어 사용되기 때문이다. 왼쪽과 ..
│문제 1874번: 스택 수열 1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다. www.acmicpc.net │풀이 n=int(input()) stack=[] count=0 result=True print_result=[] for i in range(n): tmp_num=int(input()) while count
│문제 4949번: 균형잡힌 세상 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에 www.acmicpc.net │풀이 stack=[] sentence=[] def judge(): for letter in sentence: if letter=="(" or letter==")": if letter=="(": stack.append("(") else: if not stack: return print("no") elif stack[len(stack)-1]=="[": return print("no") stack.pop(len(stack)-1) if l..
│문제 9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net │풀이 T=int(input()) stack=[] def judge(): for i in range(len(temp)): if temp[i]=="(": #( 입력시에 push stack.append("(") else: if len(stack)==0: return print("NO") else: stack.pop(len(stack)-1) #) 입력시에 pop if stack: return print("NO") # 스택이 비어있..
│문제 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net │풀이 K=int(input()) stack=[] for i in range(K): num=int(input()) if num==0: #pop연산 stack.pop(len(stack)-1) else: #push연산 stack.append(num) sum=0 for i in range(len(stack)):sum+=stack[i] print(sum) │설명 문제는 스택의 구조와 동일하다. 0이아닌 정수는 push ,0인 경우..
│문제 10828번: 스택 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net │풀이 (python) import sys N=int(input()) stack=[] for i in range(N): order=sys.stdin.readline().split() if "push" in order: stack.append(order[-1]) elif "pop" in order: if len(stack)==0: print(-1) else: print(stack[len(stack)-1]) stack.pop(len(stack..