괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
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
- 기본적으로 후입선출(LIFO:Last in First Out)의 구조를 가지고 있는데, 물건을 쌓아 두는 것과 마찬가지로 동작하기 때문에 Stack 자료 구조형이라고 불린다.
stack.pop()
을 통해 Pop(물건을 빼내는 형태)stack.append()
를 통해 Push(물건을 집어 넣는 형태)를 구현하고 있다.
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