Data Structure/Stack 9

[백준 1406번] 에디터

1406번: 에디터 첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수 www.acmicpc.net import sys input = sys.stdin.readline string = list(input().rstrip()) m = int(input().rstrip()) command_list = [tuple(input().rstrip().split()) for _ in range(m)] stack = [] for command in command_list: if len(command) == 1: # L / D / B인 경우 if command[0] == 'L'..

[백준 9935번] 문자열 폭발

9935번: 문자열 폭발 첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모 www.acmicpc.net string = list(input()) boom = input() boom_length = len(boom) stack = [] for i,value in enumerate(string): stack.append(value) if value == boom[-1] and len(stack) >= boom_length: if ''.join(stack[-boom_length:]) == boom: for j in range(boom_length): st..

[백준 2812번] 크게 만들기

2812번: 크게 만들기 N자리 숫자가 주어졌을 때, 여기서 숫자 K개를 지워서 얻을 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오. www.acmicpc.net n, k = map(int,input().split()) number = list(input()) stack = [] for i in range(n): while stack and number[i] > stack[-1] and k > 0: # 현재 숫자가 stack에 있는 숫자보다 크면 stack.pop() # 가장 큰 숫자를 앞 쪽에 위치시키기 위함 ! # k개 까지만 지워야 하므로 k > 0이상일 때만 수행 stack.pop() k -= 1 stack.append(number[i]) # 만일 k개 미만으로 숫자를 지웠다면 뒤에 있는 숫..

[백준 2504번] 괄호의 값

2504번: 괄호의 값 4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다. 만일 X www.acmicpc.net string = list(input()) stack =[] expression = "" for i,value in enumerate(string): if not (value == '(' or value == ')' or value=='[' or value == ']'): # 괄호나 대괄호가 아닌 경우 예외처리 print(0) exit(0) if value == '(' or value == '[': # 여는 괄호일 경우 스택에 넣고 표현식 열기 stack.a..

[백준 10799번] 쇠막대기

10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net # 괄호가 쌍을 이뤄서 pop될 때마다 +1 # 레이저인 경우 +현재 스택에 쌓인 개수 datas = list(input()) stack = [] answer = 0 for i,data in enumerate(datas): if data == '(': stack.append(data) elif data == ')': if datas[i-1] == '(': # 레이저인 경우 answer += (len(stack)-1) stack.pop() else: # 막대기가 끝난 경우 a..

[백준 4949번] 균형잡힌 세상

4949번: 균형잡힌 세상 각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에 www.acmicpc.net answer = [] def check_balanced(string): stack = [] for element in string: if element == '(' or element == '[': stack.append(element) elif element == ')': if not stack: return False else: if stack[-1] == '(': stack.pop() else: return False elif elem..

[백준 9012번] 괄호

9012번: 괄호 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 www.acmicpc.net t = int(input()) inputs = [list(input()) for _ in range(t)] def check_vps(str): stack = [] for element in str: if element == '(': stack.append(element) elif element == ')': if not stack: # 스택이 비어있는 경우 return False else: stack.pop() if stack: r..

[백준 17298번] 오큰수

17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net n = int(input()) elements = list(map(int,input().split())) stack = [] answer = [] for i in range(n-1,-1,-1): while True: if len(stack) == 0: answer.append(-1) stack.append(elements[i]) break if elements[i] < stack[-1]: answer.append(stack[-1]) stack.append(elements[i..

[프로그래머스 Lv.2] 올바른 괄호

프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr def solution(s): answer = True stack = [] for item in s: if len(stack) == 0: stack.append(item) elif stack[-1] == '(': if item == ')': stack.pop() elif item == '(': stack.append(item) else: stack.append(item) if len(stack) != 0: return False return True 이번 문제는 괄호만 입력받는다는 조건 하에, 괄호가 올바르게..