CodingTest/Baekjoon

[baekjoon] 백준 10799번(파이썬): 쇠막대기

JunJangE 2021. 9. 8. 18:42

문제

 

10799번: 쇠막대기

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

www.acmicpc.net

알고리즘

- 반복문을 통해 모든 괄호를 탐색한다.

- "(" 괄호는 스택에 추가한다.

- 이전 괄호가 ")" 라면 막대기에 마지막 부분을 레이저로 자른 것으로 +1 해준다.

- 현재 괄호가 ")"라면 레어저의 앞에 막대기의 개수를 모두 한 번씩 자른 것으로 스택의 길이를 더해준다.

코드

import sys

n = list(map(str, sys.stdin.readline().strip()))

stack = []
res = 0

# 모든 괄호를 탐색한다.
for i in range(len(n)):

    if n[i] == "(":
        stack.append("(")

    # 이전 괄호가 ")"라면 막대기에 마지막 부분을 자른 것으로 +1을 해준다.
    elif n[i - 1] == ")":
        stack.pop()
        res += 1

    # 현재 괄호가 ")"라면 레이저의 앞에 막대기의 개수를 한번씩 자른 것으로 스택의 길이를 더해준다.
    else:
        stack.pop()
        res += len(stack)

print(res)

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com