프로그래머스-올바른괄호

d d·2022년 10월 5일
0

코딩테스트

목록 보기
10/16
post-thumbnail

문제 설명

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

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

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

제한사항

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

입출력의 예

sanswer
"()()"True
"(())()"True
")()("False
"(()("False

입출력 예 설명

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

나의 접근1

올바르지 못한 괄호는 열리고 닫히지 않은괄호와
열리지 않았는데 닫힌 괄호이다
그래서 나는 열리고 닫힌 괄호를 카운트해서 문제가 있을시 False를 문제가 없다면 True를 리턴하는 함수를 만들도록 접근했다

def solution(s):
    if s[0] == '(' and s[-1] ==')' and len(s)%2 == 0:
        cnt = 0
        for i in range(len(s)) :
            if s[i] == '(' :
                cnt += 1
            else :
                cnt -= 1
            if cnt < 0:
                return False
        return True
    else :
        return False

효율성 2번 실패

나의 접근2

효율성을 잡기위해 for문을 돌때마다 매번 확인해 주었던 cnt의 음수 여부를 닫힌 괄호를 판별한 후에만 확인해 주도록 바꾸었다

def solution(s):
    cnt = 0
    if s[0] == '(' and s[-1] ==')':
        for i in range(len(s)):
            if s[i] == '(':
                cnt += 1
            else:
                cnt -= 1
                if cnt < 0:
                    return False
        if cnt == 0:
            return True
        else:
            return False
    else:
        return False

정답!!!

profile
광주 인공지능 사관학교

0개의 댓글