2019.02.27) 백준 스택 특집 - 10848, 9012, 10799 (PyPy3)
2019. 2. 27. 19:59ㆍ프로그래밍(주력)/백준 문제풀이
스택은 가장 최근에 넣은(마지막에 넣은) 값을 보는 자료구조이다.
파이썬에선 별로 의미가 없지만 스택이라고 생각하고 구현하였다.
10848번
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | stack = list() for i in range(int(input())): in_str = input().split(' ') # PUSH if in_str[0] == 'push': stack.append(int(in_str[1])) # POP if in_str[0] == 'pop': if len(stack) == 0: print(-1) else: print(stack.pop()) # SIZE if in_str[0] == 'size': print(len(stack)) # EMPTY if in_str[0] == 'empty': if len(stack) == 0: print(1) else: print(0) # TOP if in_str[0] == 'top': if len(stack) == 0: print(-1) else: print(stack[-1]) | cs |
9012번
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | for i in range(int(input())): s = input() stack = list() yes = True for j in range(len(s)): # 첫번쨰일때 if j == 0: # 여는 괄호면 1 추가 if s[0] == '(': stack.append(1) # 닫는 괄호면 NO elif s[0] == ')': yes = False break # 그 다음에 else: # 여는 괄호면 1 추가 if s[j] == '(': stack.append(1) # 닫는 괄호면 stack에 여는 괄호가 있으면 그걸 제거 # 만약에 없으면 NO elif s[j] == ')': if len(stack) == 0: yes = False break elif stack[-1] == 1: stack.pop() else: yes = False break if yes and len(stack) == 0: print('YES') else: print('NO') | cs |
10799번
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | stack = list() n = input() i = 0 stick = 0 result = 0 while True: # 만약 바로 괄호가 성립하면 지금 스틱 개수만큼 조각개수에 추가 if n[i:i + 2] == '()': result += stick # 두개를 넘어가야 하기 떄문에 +2 i += 2 # 만약 스틱의 시작이면 elif n[i] == '(': # 스틱 개수에 1 더하고 stick += 1 # 조각에 스틱 처음부분이 더해지고 result += 1 # 스틱 시작부분을 스택에 추가 stack.append(0) i += 1 # 스틱의 끝이면 elif n[i] == ')': # 스틱 개수 하나 줄어듬 stick -= 1 # 스틱 스택에서 제거 stack.pop() i += 1 if i == len(n): break print(result) | cs |
'프로그래밍(주력) > 백준 문제풀이' 카테고리의 다른 글
2019.03.01) 백준 dfs 특집 1편 - 1182, 6603(PyPy3) (0) | 2019.03.01 |
---|---|
2019.02.28) 백준 큐 특집 - 2161, 1966, 2164(시간초과?) (PyPy3) (0) | 2019.02.28 |
2019.02.26) 백준 11053번 풀이 (PyPy3) (0) | 2019.02.26 |
2019.02.25) 백준 11057번, 2193번 풀이 (PyPy3) (0) | 2019.02.25 |
2019.02.24) 백준 10844번 풀이 (PyPy3) (0) | 2019.02.24 |