본문 바로가기

알고리즘 문제풀이/문제풀이

[python] 프로그래머스 Level.2 올바른 괄호

https://programmers.co.kr/learn/courses/30/lessons/12909

문제 설명

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

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

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

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

s answer
()() true
(())() true
)()( false
(()( false

문제 풀이

삼항 연산자

x = x+1 if w=="(" else x-1 if w==")" else x

 

if w=="(":

    x = x+1

else:

    if w==")":

        x = x-1

    else:

        x = x

solution.py

나의 풀이

def solution(s):
    st = []
    if s[0]==')': # 처음부터 오른괄호가 있음 false
        return False
    for i,a in enumerate(s):
        if a==')': # 오른 괄호
            if not len(st): # 스택이 비어있는데 오른괄호가 들어오면
                return False # false
            del st[-1] # 스택에 왼괄호가 있으므로 만나서 pop
        else: # 왼 괄호
            st+=a # 그냥 넣기
    if len(st): # 스택에 괄호가 남아있으면 false
        return False
    return True
            

다른 풀이

def is_pair(s):
    # 함수를 완성하세요
    x = 0
    for w in s:
        if x < 0:
            break
        x = x+1 if w=="(" else x-1 if w==")" else x
    return x==0

출처: https://programmers.co.kr/learn/courses/30/lessons/12909/solution_groups?language=python3