스파르타 코딩클럽/3주차

올바른 괄호

코딩쪼앙 2022. 3. 24. 20:09

문제

첫 번째 해결방안

괄호의 개수가 같으면 올바르게 짝지어진 것이고, 개수가 다르다면 올바르지 않게 짝 지어진 것이라고 생각하여 각 괄호의 수를 세어 같으면 True를 반환하고 같지 않으면 False를 반환하는 방식으로 코드를 짰다.

input = "(())()"


def is_correct_parenthesis(string):
    left = 0
    right = 0
    for i in string:
        if i == '(':
            left += 1
        if i == ')':
            right += 1

    if left == right:
        return True
    else:
        return False


print(is_correct_parenthesis(input))

그러나 괄호의 개수가 같더라도 반대로 쓰여진 경우 예를 들어 (())인 경우가 아니라 ))((로 쓰여진 경우 개수는 같아도 올바르게 짝지어진 것이 아니므로 문제를 해결할 수 없다.

 

두 번째 해결방안

이번 주에 배운 스택자료구조를 사용하여 '('일 때 stack에 넣어주고, )이면 괄호가 닫힌 것이므로 pop해주어 stack의 길이가 0이면 True를 반환하고, 그렇지 않다면 False를 반환하도록 하였다.

input = "(())()"

def is_correct_parenthesis(string):
    stack = []
    for i in range(len(string)):
        if string[i] == '(':
            stack.append(i)
        elif string[i] == ')':
            if len(stack) == 0:
                return False
            stack.pop()

    if len(stack) == 0:
        return True
    else:
        False

print(is_correct_parenthesis(input))  # True 를 반환해야 합니다!

이 때 ')'가 들어오더라도 스택에 아무 값도 없어 닫을 수 없는 상태라면 올바르게 짝지어진 것이 아니므로 False를 반환한다.

'스파르타 코딩클럽 > 3주차' 카테고리의 다른 글

멜론 베스트 앨범 뽑기  (0) 2022.03.28
최대 할인 적용하기  (0) 2022.03.24
해쉬 활용문제  (0) 2022.03.24
해쉬 구현하기  (0) 2022.03.24
큐 구현하기  (0) 2022.03.24