Python/Programmers

[Python/Programmers/Level 2] 올바른 괄호

아웃라이어_ 2020. 9. 30. 23:46

출처 : programmers.co.kr/learn/courses/30/lessons/12909

 

코딩테스트 연습 - 올바른 괄호

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 ()() 또는 (())() 는 올바른 괄호입니다. )()( 또는 (()( 는 올바르지 않은 괄호�

programmers.co.kr

* 이 포스팅은 Programmers 코딩 테스트 연습 Level 2 "올바른 괄호" 문제풀이입니다.

   문제 원본은 링크를 클릭하시면 확인하실 수 있습니다.

# 문제 설명

  • 괄호가 바르게 짝지어졌다는 것은 "(" 문자로 열렸으면 반드시 짝지어서 ")" 문자로 닫혀야 한다는 뜻입니다.

  • 예를 들어

    • "()()" 또는 "(())()"는 올바른 괄호입니다.

    • ")()(" 또는 "((()("는 올바르지 않은 괄호입니다.

# 문제

  • "(" 또는 ")" 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해주세요.

# 제한사항

  • 문자열 s의 길이: 100,000 이하의 자연수

  • 문자열 s는 "(" 또는 ")"로만 이루어져 있습니다.

입출력
s answer
"()()" true
"(())()" true
")()(" false
"(()(" false

# 코드 설명

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def solution(s):
    answer = True
    
    stack = []
    
    for x in s:
        if len(stack) != 0 and x == ")":
            stack.pop()
        else:
            stack.append(x)
    
    if len(stack) != 0:
        answer = False
    
    return answer
cs

 

  • answer : 입력으로 주어진 문자열 s가 올바른 괄호이면 true를 저장, 올바르지 않은 괄호이면 false를 저장하는 변수

  • stack : 괄호의 짝을 맞추기 위한 스택 자료구조

  • if len(stack) != 0 and x == ")": stack.pop()

    • len(stack) !0 : 스택 자료구조가 비어있을 경우 pop을 하게 되면 오류가 발생하므로 이를 방지하기 위한 코드

    • x == ")" : ")"가 나타나면 스택에 저장되어 있는 "("를 하나 pop

    • pop( ) : 리스트에서 맨 마지막 원소를 하나 꺼냄

  • else: stack.append(x)

    • x가 ")" 가 아니면 "("를 스택에 삽입

  • if len(stack) != 0:

    • 스택이 비어있으면, 모든 괄호의 짝이 맞아 올바른 괄호라는 의미

    • 스택이 비어있지 않으면, 즉 스택에 "(" 나 ")" 가 남아 있으면 올바르지 않은 괄호라는 의미