🔗 Problem Link

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


❔Thinking

  • '균형잡힌 괄호 문자열' p가 주어질 때, '올바른 괄호 문자열'로 변환한 결과를 반환한다.
  • '균형잡힌 괄호 문자열'은 '('와 ')'의 개수가 같은 문자열이다.
  • '올바른 괄호 문자열'은 '균형잡힌 괄호 문자열'이면서 '('와 ')' 짝이 모두 맞는 문자열이다.

💻Solution

def bracket_check(s):
    cnt = 0
    for char in s:
        if cnt < 0:
            return False
        cnt += 1 if char == '(' else -1
    if cnt != 0:
        return False
    return True
        

def bracket(p):    
    # 1. 입력이 빈 문자열인 경우
    if p == '':
        return ''
    
    # 2. 문자열을 균형잡힌 괄호 문자열 u, v로 분리
    left_right_cnt = 0
    idx = 0
    for i in range(len(p)):
        left_right_cnt += 1 if p[i] == '(' else -1
        if left_right_cnt == 0:
            idx = i
            break
    u, v = p[:i+1], p[i+1:]

    # 3. u가 올바른 괄호 문자열인 경우
    if bracket_check(u) is True:
        return u + bracket(v)

    # 4. u가 올바른 괄호 문자열이 아닐 경우
    tmp = '(' + bracket(v) + ')'
    if u:
        for char in u[1:-1]:
            tmp += '(' if char == ')' else ')'
    return tmp
    

def solution(p):
    return bracket(p)

🗝️keypoint

  1. 주어진 알고리즘을 순서대로 빠짐없이 그대로 구현하는것이 중요하다.
  2. 괄호가 한 종류일 경우, '올바른 괄호 문자열'은 별도의 list 없이 int로 확인할 수 있다.
  3. 4-4의 '나머지 문자열의 괄호 방향을 뒤집어서'는 문자열의 순서를 뒤집는게 아니라 각 괄호의 방향만 뒤집는 것이다.

+ Recent posts