본문 바로가기
  • 초부득3 - 어제보다 나은 내일을 위해
  • 꿈이 현실이 되는 날까지
sw사관학교 정글 2기/02 이분탐색, 분할정복, 스택, 큐, 우선순위 큐

[스택] 백준 10799번 쇠막대기 with Python3

by 금의야행 2021. 8. 19.

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의 모든 원소 더하기 = 답

 

정답 풀이

#딴건 안봄

출처:

 

해석

 

댓글