컴퓨터 알고리즘

괄호 짝 맞추기(+ 스택으로 풀 수 있는 프로그래밍 문제, 파이썬)

The Ohgorithm 2025. 9. 28. 22:15

문제: 괄호의 짝이 맞는지 판별하는 함수 구현. 괄호의 짝이 맞으면 True, 짝이 맞지 않으면 False를 반환

 

s 반환값
(())() True
((())() False

 

 


 

 

  • 리스트가 비었으면 False
  • 리스트가 차 있으면 True

 

 

 
# 괄호 짝 맞추기
def solution(s):
  stack = [ ]                # 여는 괄호 '(' 를 담아둘 스택
  for c in s:                # 문자열의 각 문자 c를 하나씩 확인
    if c == '(':             # 만약 여는 괄호라면
      stack.append(c)        # 스택에 push (쌓아둔다)
    elif c == ')':           # 만약 닫는 괄호라면
      if not stack:          # 스택이 비어 있다면 (여는 괄호가 없는데 닫는 괄호가 나온 경우)
        return False         # 잘못된 괄호 문자열 → False 반환
      stack.pop()            # 스택에서 하나 꺼내서 '('와 ')'를 짝지어 제거
  if stack:                  # 반복이 끝난 뒤에도 스택에 '('가 남아 있다면
    return False             # 닫히지 않은 괄호가 있으므로 False
  return True                # 모든 괄호가 올바르게 짝지어진 경우 True

# 테스트
print(solution('(())()'), solution('((())()'))
# (())()  → 올바른 괄호 → True
# ((())() → 닫히지 않은 '(' 남음 → False