Data Structure 🛠️/Stack9 [백준 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'.. 2023. 10. 18. [백준 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.. 2023. 10. 18. [백준 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개 미만으로 숫자를 지웠다면 뒤에 있는 숫.. 2023. 10. 18. [백준 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.. 2023. 10. 18. [백준 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.. 2023. 10. 18. [백준 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.. 2023. 10. 18. 이전 1 2 다음