알고리즘/스택,큐

[프로그래머스] 올바른 괄호 - 파이썬(python)

아뵹젼 2022. 9. 2.

 

나의 풀이

def solution(s):
    stack = []
    for i in s :
        if i == '(' :
            stack.append('(')
        else :
            if stack :
                stack.pop()
            else :
                return False
    return stack==[]

( 를 stack 에 넣고,

)가 나오면 stack에 있는 ( 를 상쇄시킬 것이다.

만약 stack 에 아무것도 없다면? 

(가 나오지 않았는데 ) 가 나온 것이므로 false 를 리턴해야 한다.

한편, 반복문을 모두 돈 후에도 stack 이 비어있지 않다면

) 의 개수가 ( 보다 더 많음을 의미하므로 false 를 리턴한다.

 

 

 

다른 풀이

아주 감탄한 풀이...

심지어 내가 푼 방법보다 훨씬 쉽다.

오히려 단순하게 생각하는 것도 연습이 필요한 것 같다.

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

( 의 개수를 x로 표현한다. 

즉, ( 가 나오면 x 를 1씩 증가시킨다.

)가 나온다면 (와 짝을 맞추기 위해 ( 를 상쇄할 수 있다.

즉, x의 값을 1 감소시킨다.

만약 ) 가 나왔는데 x가 0보다 작다면? ( 가 나오지 않았는데 ) 가 나온 것이다.

마지막에는 x가 0이라면 true 를, 음수 혹은 양수가 나온 경우에는 false 를 리턴하도록 한다.

 

 

★ 파이썬 중첩 삼항 연산자

새로 알게 된 문법이다.

참1 if 조건1 else [ 참2 if 조건2 else 거짓2]

만약 조건1이 참이라면? -> 참1

만약 조건1가 거짓이라면? ->  [ 참2 if 조건2 else 거짓2] 실행

  • 조건2가 참이라면? -> 참2
  • 조건2가 거짓이라면? 거짓2

 

 

댓글