10799(쇠막대기)-자료구조(python)

지환·2023년 10월 31일
0

백준(python)

목록 보기
67/67

출처 | https://www.acmicpc.net/problem/10799

해당 문제는 문제를 분석 하는데 있어 많은 시간이 소요 됐다. 문제를 풀 때 마다 분석력의 필요성을 느끼고 있다.

문제 이해

1번 예제와 2번 예제를 이해해야 한다.

1) 레이저가 나올 때 여는 괄호가 나온 만큼 스택에 추가한다.

2) 레이저가 아닐 경우에 닫는 괄호가 나오면 결과값에 1개를 카운팅 해야한다.

해당 부분은 해당 블로그를 참고하면 된다.

코드


# 해당 문제를 풀 때 3가지를 고려해야된다. [스택 이용]

#  ')' -> '(' 일 경우  -> len(stack)
#  ')' -> ')' 일 경우  -> cnt+=1
word = input() # 문자열로 받는다. -> index -> for
stack = []
cnt = 0
# for문을 돌면서 -> 문자열 검사를 실시한다.

for i in range(len(word)): #word를 쪼개면서 진행한다.
  if word[i] == '(':
    stack.append(word[i]) # i는 안되는가?

  else: #이렇게 조건을 주는 것 자체가 ')'을 내포한다.
    if word[i-1] == '(':
      stack.pop(-1) # top을 pop한다.
      cnt += len(stack) 
    
    else: # word[i-1] == ')' 일  경우
      stack.pop(-1)
      cnt += 1

print(cnt)





profile
아는만큼보인다.

0개의 댓글