[프로그래머스] Lv.2 올바른 괄호 (Python)

seulzzang·2022년 10월 10일
0

코딩테스트 연습

목록 보기
28/44
post-thumbnail

📍 문제

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

📍 풀이

  • 처음에 단순히 여는 괄호로 시작할 경우, 여는 괄호가 닫는 괄호의 개수가 같으면 True를 반환해주고 닫는 괄호로 시작한다면 False를 반환해주는 방식으로 생각했다. (닫는 괄호로 시작하는 것은 애초에 틀린 것 이니까)

💻 코드 (오답)

def solution(s):
    if s[0] == '(' and s[-1] == ')':
        return s.count('(') == s.count(')')
    else:
        return False

이러면 테스트 5테스트 11을 통과하지 못한다. 왜 통과를 못하는지 모르겠다.. 테스트 케이스좀 알려줬으면 ㅠ_ㅠ
스택/큐 카테고리에 있어서 스택을 이용해 주기로 했다.

💻 코드 (통과)

  • 여는 괄호를 스택에 담아준다.
  • 닫는 괄호가 맨 처음에 등장할 경우 (stack == []일때 닫는 괄호가 등장할 경우) 틀린 괄호이므로 False를 반환
  • 아니라면 괄호가 짝을 이루는 경우이므로 이를 스택에서 pop해준다.
  • stack이 비어있다면 모든 괄호가 짝을 이룬 경우이므로 True가 반환되고, 아니라면 False가 반환된다.
def solution(s):
    answer = True
    stack = []
    for i in s:
        if i == '(':
            stack.append(i)
        else: # i == ')'인 경우
            if stack == []: 
            return False
            else:
                stack.pop()
    return stack == []

스택을 안써도 리스트로 충분히 해결 가능한?
굳이 스택을 이용한 이유를 짜내자면 스택은 LIFO니까 stack의 맨마지막 원소인 '('')'이 짝을 이룬다는 것을 pop으로 추출해준다.. 정도 인듯


근데 난 아직도 내가 맨 처음에 제출한 코드가 뭐가 틀린건지 잘 모르겠다. 여닫는 괄호가 짝을 다 이루는 걸 개수로 표현해 준건데 어떤 테스트케이스가 있는지 궁금..

profile
중요한 것은 꺾이지 않는 마음

1개의 댓글

comment-user-thumbnail
2023년 1월 23일

지나가다가 댓글남겨봅니다. 코드(오답)의 반례로 ( ) ) ( ( ) 가 될 수 있겠네요 !

답글 달기