sw사관학교 정글 2기/02 이분탐색, 분할정복, 스택, 큐, 우선순위 큐
[스택] 백준 10799번 쇠막대기 with Python3
금의야행
2021. 8. 19. 12:54
https://www.acmicpc.net/problem/10799
10799번: 쇠막대기
여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저
www.acmicpc.net
문제
내 풀이
import sys
from collections import deque
#입력
input = sys.stdin.readline
str = input().rstrip()
#자료형
stack = deque([])
result = list()
#인덱스 대체제
count = 0
#들어갔다 나갔다하는 stack 활용
for i in str:
if i == ")":
top = stack.pop()
if str[count-1] != ")" and count != 0: # 레이저인경우
if top == "(":
result.append(len(stack))
else: # 쇠막대인 경우
if top == "(":
result.append(1)
else:
stack.append(i)
count += 1
print(sum(result))
해설
총 세개의 자료구조 .
1. 입력받은 괄호 (str)
2. 잘릴 쇠막대기 용 stack
3. 잘린 개수를 담을 result (list)
1. str을 처음부터 차례로 진행
각 ) 마다 stack 의 top 을 pop
"(" 일 경우
stack의 남은 ( 개수 만큼 result에 추가 ( 잘린 쇠막대기 개수)
")" 일 경우, 1. 레이저인지, 2. 쇠막대기의 꼬다리 인지 확인
꼬다리이기에 result에 1 추가
2. result의 모든 원소 더하기 = 답
정답 풀이
#딴건 안봄
출처:
해석