배고픈 개발자 이야기

[2020 kakao blind] 괄호변환 본문

알고리즘 문제/PROGRAMMERS

[2020 kakao blind] 괄호변환

이융희 2021. 8. 12. 14:27
728x90

괄호 맞추기 문제로 stack 개념을 사용하여 풀었다

 

요점은 다음 함수 2개를 잘 구현하면된다.

1. 올바른 괄호쌍을 검사하는 함수

2. u, v로 나누어 규칙에 맞게 처리하는 함수

 

def compact(p):
  stack = []
  for x in p:
    if x == '(':
      stack.append('(')
    else:
      if not stack:
        return False
      stack.pop()
  return True

def seperate(p):
  if not p:
    return p

  l, r = '', ''
  if p[0] == '(':
    l, r = '(', ')'
  else:
    l, r = ')', '('
  
  stack = []
  idx = 0
  for i, x in enumerate(p):
    if x == l:
      stack.append(x)
    else:
      idx = i
      break

  for i, x in enumerate(p[idx:]):
    if x == l:
      stack.append(x)
    else:
      stack.pop()
      if not stack:
        idx = idx + i + 1
        break

  u, v = p[:idx], p[idx:]
  if compact(u):
    return u + seperate(v)
  else:
    temp = '(' + seperate(v) + ')'
    for x in u[1:len(u)-1]:
      if x == '(':
        temp += ')'
      else:
        temp += '('
    return temp

def solution(p):
  answer = ''
  answer = seperate(p)
  return answer
Comments