스택 6

[코테] 코딩 테스트 합격자 되기 2주차 - 스택

스택의 어원은 '쌓는다' 입니다. 어원에서 짐작할 수 있듯이, 먼저 입력한 데이터를 제일 나중에 꺼낼 수 있는 자료구조입니다. 이렇게 먼저 들어간 것이 마지막에 나오는 규칙을 후입선출 혹인 LIFO(Last IN First Out)이라고 합니다. 이 때, 스택에 삽입하는 연산을 push, 꺼내는 연산을 pop 이라고 합니다. 📖 스택의 동작 원리 이해하기 빈 통(빈 스택)에 사탕을 넣는다고 하면, 아래와 같이 나타낼 수 있습니다. 📖 스택의 ADT ADT는 우리말로 추상 자료형(abstract data type)인데요, 추상 자료형이란 인터페이스만 있고 실제로 구현은 되지 않은 자료형입니다. 일종의 자료형의 설계도라고 생각하면 됩니다. 그렇다면 스택은 어떤 정의가 필요한 자료구조일까요? 우선 스택에는 ..

DFS/BFS - 그래프를 탐색하기 위한 알고리즘

먼저, 꼭 필요한 자료구조의 기초에 대해 살펴보자. '탐색'이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 으로 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 DFS와 BFS 가 있는데, 이를 제대로 이해하려면, 먼저 스택과 큐에 대한 이해가 선수되어야 한다. 먼저, 스택(stack)을 살펴보자. 스택은 양동이에 물체를 넣는다고 생각하면 된다. 이러한 구조를 선입 후출(First In Last Out) 또는 후입 선출(Last In First Out),LIFO 구조라고 한다. 구조를 그림으로 그려보면 아래와 같다. 이를 파이썬 코드로 표현한다면, stack = [] # 삽입(5) - 삽입(2) - 삽입(3) - 삭제() - 삽입(1) - 삽입(7..

[백준/알고리즘/python/java] 4949번 - 균형잡힌 세상

백준 9012번 괄호 문제에서 소괄호 뿐만 아니라 대괄호도 추가되었다고 생각하면 된다. 입력의 종료조건으로 맨 마지막에 점 하나(".")만 들어온다고 했으니, 무한루프를 만들고, 입력이 점 하나(".")라면 프로그램이 종료되게 하고 그렇지 않으면 계속해서 입력을 하도록 구현하면 된다. 맨 처음에는 IndexError 가 났었다. (IndexError가 났었던 코드) stack = [] while(True): line = input() if(line == "."): break for s in line: if s == "(" or s == "[": stack.append(s) elif s == ")": if stack[-1] == "(": stack.pop() else: break elif s == "]":..

[백준/알고리즘/python/java] 9012번 - 괄호

괄호 문제는 스택 문제중에서도 흔한 유형에 속한다. 여는 괄호와 닫힌 괄호가 쌍을 이루고, 짝이 맞는다면 올바른 괄호 문자열 (Valid PS, VPS) 인 것이다. (코드는 아래와 같다.-파이썬,python) import sys input = sys.stdin.readline testcase = int(input()) for i in range(testcase): bracket = [] stack = [] command = input() bracket.append(command) for j in command: if j == "(": stack.append(j) elif j == ")": if(len(stack) == 0): break else: stack.pop(-1) if(j == command[-..

[백준/알고리즘/python/java] 10773번 - 제로

전형적인 스택 문제이다. 파이썬에서는 스택을 구현할 때, 리스트를 활용하여 push 역할은 append() 로 구현하고 pop 역할은 pop() 으로 구현하면 된다. (코드는 아래와 같다. -python) k = int(input()) sum = 0 number_list = [] for i in range(k): n = int(input()) if n == 0: # 입력된 수가 0 이면 pop number_list.pop(-1) else: number_list.append(n) for answer in number_list: sum += answer print(sum) pop() 안에 따로 인덱스 인자를 안 넣어주면 맨 끝의 원소를 빼준다. (pop(-1) 이나 pop()이나 같은 역할이다.) (아래는 ..

[백준/알고리즘/python/java] 10828번 - 스택

파이썬에서 스택 자료구조 라이브러리를 따로 제공하지 않는다. 대신, 리스트를 스택으로 기능하도록 구현할 수 있다. 이 문제가 바로 그런 문제이다. 문제에서 주어진 다섯가지 명령을 함수로 만들어도 되는데, 우선 스택을 Class 로 만들어봤다. (코드는 아래와 같다.-python) import sys input = sys.stdin.readline class Stack: def __init__(self): self.stack = [] def __len__(self): # 스택의 길이(크기) return len(self.stack) def push(self, item):# 스택에 item 집어넣기 self.stack.append(item) def pop(self):# 스택의 가장 위에 있는 원소 빼내기 if..

반응형