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

DongHyeon·2023년 10월 18일
0

올바른 괄호

programmers

1. 문제 설명

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

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

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

2. 제한 사항

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

3. 작성 코드 (1)

def solution(s):
    #여 닫기를 세는 count 선언
    count=0
    #s의 글자수 만큼 반복하는데
    for i in range (len(s)):
        #s가 여는 괄호일때는 1을 더하고
        if s[i]=="(":
            count=count+1
        #s가 닫는 괄호에는 1을 뺀다.
        else:
            count=count-1
        #만약 한번이라도 음수 값이 나오면 먼저 닫는 괄호가 나오므로 False
        if count<0:
            return False
    #반복문 탈출 후 0이 나왔다면 올바른 괄호
    if count==0:
        return True
    #0이 아니라면 올바르지 않은 괄호
    else:
        return False

4. Stack 알고리즘

  • 기본적으로 후입선출(LIFO:Last in First Out)의 구조를 가지고 있는데, 물건을 쌓아 두는 것과 마찬가지로 동작하기 때문에 Stack 자료 구조형이라고 불린다.
  • stack.pop()을 통해 Pop(물건을 빼내는 형태) stack.append()를 통해 Push(물건을 집어 넣는 형태)를 구현하고 있다.

5. 작성코드 (2) : Stack

def solution(s):
    answer = True
    stack=[] # stack을 배열로 선언
    for i in s:
        if i=="(": # 여는 괄호의 경우에는 
            stack.append(i) # 해당 괄호를 stack에 저장
        else: # 닫는 괄호의 경우에는
            if stack: # 만약 stack에 여는 괄호가 존재하다면
                stack.pop() # stack에 여는 괄호를 하나 지우고
            else: # 여는 괄호가 존재하지 않는다면
                return False # 닫는 괄호가 먼저 나온 것이므로 False출력
    if stack: # 마지막까지 순회하였음에도 스택에 원소가 존재한다면
        return False # 여는 괄호의 개수가 많은 것이므로 False출력
    return True #통과하면 True
profile
I'm Free!

0개의 댓글