[BOJ] 10799. 쇠막대기

2025. 7. 21. 15:47·BOJ

📌 문제 제목

문제 링크: BOJ 10799

🗒️ 문제 설명

쇠막대기는 여는 괄호와 닫는 괄호로 표현된다.

레이저는 여는 괄호와 닫는 괄호의 인접한 쌍으로 표현된다.

괄호 문자열이 주어졌을 때 잘려진 쇠막대기는 총 몇 개인지 구하는 프로그램.

시간 제한: 1초

메모리 제한: 256MB


💡 문제 해결 아이디어

  • 여는 괄호 = 스택에 추가
  • 닫는 괄호
    • 레이저: 스택의 마지막 원소가 여는 괄호일 경우 레이저임.
      • 스택에 남아있던 여는 괄호들의 개수만큼 쇠막대기가 만들어짐.
      • 스택에 남아있던 여는 괄호들의 갯수를 answer에 추가 (추가: +=)
      • 스택에 남아있던 여는 괄호들의 갯수를 tmp에 추가 (추가: +=)
      • 스택을 비움
    • 쇠막대기: 스택의 마지막 원소가 여는 괄호가 아니면 쇠막대기임.
      • answer이 1씩 증가

⌛️ 시간 복잡도

  • O(N)

✅ 최종 코드

import sys
input = sys.stdin.readline

ps = input().strip()

answer = 0
tmp = 0
stk = []

for b in ps:
    if b == "(":
        stk.append(b)
    else:
        if stk and stk[-1] == "(":  # 레이저
            stk.pop()
            answer += (len(stk) + tmp)
            tmp += len(stk)
            stk = []
        else:  # 쇠막대기
            answer += 1
            if tmp:
                tmp -= 1

print(answer)
import sys
input = sys.stdin.readline

ps = input().strip()

answer = 0
stk = []

for i, b in enumerate(ps):
    if b == "(":
        stk.append(b)
    else:
        stk.pop()
        if ps[i-1] == "(":  # 레이저
            answer += len(stk)
        else:  # 쇠막대기
            answer += 1

print(answer)

'BOJ' 카테고리의 다른 글

[BOJ] 1926. 그림  (0) 2025.07.22
[BOJ] 2504. 괄호의 값  (0) 2025.07.21
[BOJ] 9012. 괄호  (0) 2025.07.21
[BOJ] 3986. 좋은 단어  (0) 2025.07.21
[BOJ] 4949. 균형잡힌 세상  (0) 2025.07.21
'BOJ' 카테고리의 다른 글
  • [BOJ] 1926. 그림
  • [BOJ] 2504. 괄호의 값
  • [BOJ] 9012. 괄호
  • [BOJ] 3986. 좋은 단어
rubato.dev
rubato.dev
  • rubato.dev
    rubato.dev
    rubato.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (33) N
      • BOJ (28)
      • 알고리즘 (4)
      • TIL (0)
      • Project (1) N
  • 인기 글

  • 태그

    backtracking
    스택
    Zelda
    Next.js
    PriorityQueue
    dp
    Algorithm
    PYTHON
    투 포인터
    DFS
    Project
    stack
    BFS
    BOJ
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
rubato.dev
[BOJ] 10799. 쇠막대기
상단으로

티스토리툴바