본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Silver 4][Python] 11899번 : 괄호 끼워넣기

by 빛밤하늘 2021. 6. 4.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

11899번: 괄호 끼워넣기

첫 번째 줄에 S를 올바른 괄호열으로 만들기 위해 앞과 뒤에 붙여야 할 괄호의 최소 개수를 출력합니다. 불가능한 경우는 주어지지 않습니다.

www.acmicpc.net

 

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# readline을 사용하기 위해 import합니다.
from sys import stdin

# 첫 번째 줄에 올바르지 않은 괄호열 S를 입력합니다.
# S의 길이는 1 이상 50 이하입니다.
# 맨 끝의 \n은 지워줍니다.
S = stdin.readline().rstrip()
# 괄호 스택을 리스트 변수로 선언합니다.
bracket_stack = []
# 필요한 괄호의 최소 개수를 저장하는 변수를 선언합니다.
need_bracket_cnt = 0

# 괄호열 S를 한 글자씩 반복해봅니다.
for bracket in S:
    # 현재 글자가 (라면
    if bracket == '(':
        # 괄호 스택에 (를 넣어줍니다.
        bracket_stack.append(bracket)
    # 현재 글자가 )라면
    else:
        # 괄호 스택이 비워져 있지 않고, 마지막 글자가 (라면
        if len(bracket_stack) != 0 and bracket_stack[-1] == '(':
            # 괄호 스택에서 마지막 글자인 (를 빼줍니다.
            bracket_stack.pop()
        # 그 외의 경우라면
        else:
            # 필요한 괄호의 개수에 1을 더해줍니다.
            need_bracket_cnt += 1

# 괄호 스택에 남아있는 (만큼 )가 필요하므로 그 개수를 필요한 괄호의 개수에 더해줍니다.
need_bracket_cnt += len(bracket_stack)
# 필요한 괄호의 최소 개수를 출력합니다.
print(need_bracket_cnt)

결과

 

맞았습니다 결과를 보고 나서 다른 사람들의 파이썬 결과를 보니 하나같이 저보다 빠른 실행 시간을 냈습니다.

저도 완성된 코드를 보고 뭔가 더 좋은 방법이 있을 텐데 생각했었지만 귀찮아서 제출했습니다.

정작 88ms 결과가 나오길래 생각보다 괜찮구나 했는데 역시나 자만하면 안되겠습니다...

 

이 문제가 머릿속에서 잊힐 즈음에 한 번 더 풀어봐야겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글