Algorithm/Online judge

[프로그래머스] 연습문제 > 올바른 괄호

민철킹 2021. 1. 24. 14:52

programmers.co.kr/learn/courses/30/lessons/12909?language=python3

 

코딩테스트 연습 - 올바른 괄호

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

programmers.co.kr

문제 설명

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

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

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

제한사항

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

입출력 예

sanswer

()() true
(())() true
)()( false
(()( false

입출력 예 설명

입출력 예 #1,2,3,4
문제의 예시와 같습니다.

 


 

풀이

주어진 문자열을 리스트로 변환.
먼저 맨 첫 값이 ')'이거나 맨 마지막 값이 '('이면 무조건 잘못된 괄호이므로 바로 return false
그다음 '('의 개수와 ')'의 개수가 다르면 바로 return false
같다면 판별해야 되는 케이스 ==> ()))((() ==> 위의 두 조건 충족하지만 내부 괄호가 올바르지 않음.
개수가 같을 때의 내부 조건으로 count 변수 하나 선언 후, for문을 s를 기준으로 돌림.
올바른 괄호라면 무조건 '('이 먼저 나옴. 따라서 '('이 나오면 +1 ')'이 나오면 -1을 시킴.
그렇게 for문을 돌면서 count의 값이 0보다 작아지는 순간이 있으면 잘못된 괄호.

def solution(s):
    s = list(s)
    if s[0] == ')' or s[-1] == '(':
        return False
    count_open = 0
    for i in s:
        if i == '(':
            count_open += 1
        else:
            count_open -= 1
        if count_open<0:
            return False 
    return True
반응형