본문 바로가기

알고리즘/프로그래머스

[Python] 올바른 괄호

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

  • 첫 번째 풀이
# 올바른 괄호
# 첫 번째 풀이
def solution(s):
    if len(s) % 2 != 0:
        return False
    elif s[0] == ')' or s[-1] == '(':
        return False
    else:
        error = 0
        for i in s:
            if i == '(':
                error += 1
            else:
                error -= 1
        if error == 0:
            return True
        else:
            return False

'('를 +1, ')'를 -1로 놓고 최종 합이 0이 되면 안 되나?? 하는 생각으로 했지만 몇 가지 케이스에서 틀림. 뭔가 빼먹은 게 있는 것 같지만 리스트를 이용해서 다르게 풀어봄.

  • 두 번째 풀이
# 두 번째 풀이
def solution(s):
    _list = []
    for i in s:
        if i == '(':
            _list.append(i)
        else:
            if _list ==[]:
                return False
            else:
                _list.pop()
    if len(_list)==0:
        return True
    else:
        return False

정답이긴 하지만.... 뭔가 처음 아이디어로 풀 수 있는 방법이 없을까? 찾다가 다른 사람이 비슷한 아이디어로 푼 풀이를 발견.

 

  • 다른 사람의 풀이
# 다른 사람의 풀이
def solution(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

합이 0이 되게 한다는 건 같지만 중간에 x <0 일 때 break 하는 걸 생각을 못함..... 이런 디테일이 중요한 것이야.