Algoritm/BOJ

[BOJ] 10799번 : 쇠막대기

twoDeveloper 2021. 9. 14. 23:29

■ 문제 해설

· 이전 괄호 (prev) 를 이용해서 해결

· '(' 쇠막대기인 경우 stack에 append

· 이전 값 (prev) 와 s[i] 값이 ')'인 경우 => 레이저

   1) 괄호를 맞추기 위해 stack에 pop

   2) stack에 들어간 쇠막대기 수만큼 더함

· 이전 값 (prev) 와 s[i] 값이 ')'인 경우 => 쇠막대기가 끝난 경우

   1) 쇠막대기 절단하여 +1

· 이전 값 (prev) = s[i]로 값 초기화

 

■ 문제 해답

import sys
input = sys.stdin.readline

s = list(input().rstrip())
stack = []
result = 0
prev = None                        

for i in range(len(s)):
  if s[i] == '(':                   
    stack.append(s[i])
  elif prev == '(' and s[i] == ')': 
    stack.pop()                     
    result += len(stack)            

  elif prev == ')' and s[i] == ')': 
    result += 1                     
    stack.pop()
  prev = s[i]

print(result)

문제출처 : https://www.acmicpc.net/problem/10799

 

10799번: 쇠막대기

여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저

www.acmicpc.net

 

'Algoritm > BOJ' 카테고리의 다른 글

[BOJ] 13023번: ABCDE  (0) 2022.04.14
[BOJ] 1935번 : 후위 표기식2  (1) 2021.09.16
[BOJ] 1158번 : 요세푸스 문제  (0) 2021.09.12
[BOJ] 10845 : 큐  (0) 2021.09.11
[BOJ] 9093번 : 단어뒤집기  (0) 2021.09.08