[프로그래머스] 올바른 괄호 / 파이썬

문제풀이


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

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

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

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

제한사항

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

입출력 예

sanswer
"()()"true
"(())()"true
")()("false
"(()("false

문제정리


올바른 괄호의 조건을 생각해봤습니다.

  1. '('의 개수와 ')'의 개수가 같아야 합니다.
  2. 앞부터 검사하였을 때'('의 개수가 ')'보다 항상 같거나 많아야 합니다.

제가 떠올린 올바른 괄호의 조건은 위와 같았습니다.
우선 문자열을 앞부터 검사하여'('의 경우 left_count')'의 경우 right_count를 증가시킵니다.
right_countleft_count보다 커지는 순간 올바른 괄호가 아니므로 False를 반환합니다.
위 조건을 만족하는 경우 left_countright_count가 같다면 올바른 괄호 아니라면 올바른 괄호가 아닙니다.

def solution(s):
    left_count = 0
    right_count = 0
    for c in s:
        if c == "(":
            left_count += 1
        else:
            right_count += 1
        if right_count > left_count:
            return False
    return True if left_count == right_count else False

좋은 웹페이지 즐겨찾기