본문 바로가기
ALGORITHM/PROGRAMMERS

[PG/Python] 괄호 변환

by 안녕나는현서 2021. 11. 30.
728x90

📌 문제

https://programmers.co.kr/learn/courses/30/lessons/60058

 

코딩테스트 연습 - 괄호 변환

카카오에 신입 개발자로 입사한 "콘"은 선배 개발자로부터 개발역량 강화를 위해 다른 개발자가 작성한 소스 코드를 분석하여 문제점을 발견하고 수정하라는 업무 과제를 받았습니다. 소스를

programmers.co.kr

 

📌 문제 접근 방법

  1. 스택을 활용하여 올바른 괄호열을 판단하는 함수를 만들었다.
    1. 여는 괄호를 만나면 스택 안에 넣는다.
    2. 닫는 괄호를 만나면 스택에서 괄호 하나를 pop 한다.
    3. 문자열이 끝나지 않았는데 스택에서 pop을 할 수 없거나, 문자열이 끝났는데 스택에 남는 괄호가 있다면 올바른 괄호열이 될 수 없다.
  2. 그 후에는 문제에서 주어진 방식을 그대로 따라서 변환할 수 있도록 함수를 짰다.

 

📌 코드

def is_correct(string):
    stack = []

    for s in string:
        if s == '(':
            stack.append(s)
        else:
            if not stack:
                return False
            stack.pop()
    
    if stack:
        return False
    
    return True


def solution(p):
    if is_correct(p):
        return p

    answer = ''

    def change_correct(string):
        nonlocal answer
        
        if not string:
            return string

        u = [string[0]]
        v = []

        for i in range(1, len(string)):
            if u.count('(') == u.count(')'):
                v = string[i:]
                break
            else:
                u.append(string[i])
        
        if is_correct(u):
            answer += ''.join(u)
            change_correct(''.join(v))
        else:
            answer += '('
            change_correct(''.join(v))
            answer += ')'
            for i in range(1, len(u)-1):
                if u[i] == '(':
                    answer += ')'
                else:
                    answer += '('
    
    change_correct(p)

    return answer
728x90

'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글

[PG/Python] 큰 수 만들기  (0) 2021.12.02
[PG/Python] 멀쩡한 사각형  (0) 2021.12.01
[PG/Python] 수식 최대화  (0) 2021.11.14
[PG/Python] 전력망을 둘로 나누기  (0) 2021.11.14
[PG/Python] 타겟 넘버  (0) 2021.11.04

댓글