Algorithm & Problem Solving/그리디 알고리즘(Greedy)

[백준 4889] 안정적인 문자열 (Python)

baby_ohgu 2021. 2. 5. 02:11

www.acmicpc.net/problem/4889

 

4889번: 안정적인 문자열

입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 문자열의 길이가 2000을 넘는 경우

www.acmicpc.net

 

문제풀이

stack을 이용해 안정적이지 않은 경우 ans를 증가하는 방식으로 해결할 수 있다. 

 

1. 현재 문자가 '{' 이면 stack에 append하기

 

2. 현재 문자가 '}' 이면 stack 에서 pop하기

- stack 이 비어있을 경우 안정적이지 않은 경우이므로 ans 증가

- 이 경우 안정적이지 않은 '}' 를 바꿔줘야 하므로 '{'를 stack에 append

 

3. stack 이 남아있을 경우, stack에 남아있는 개수가 2의 배수일 경우 ans 증가하기 => 2의 배수일 경우 '{' 를 '}'로 바꿔서 안정적인 문자로 만들어야 하기 때문

 

코드

import sys

if __name__ == '__main__':
    idx = 1
    while True:
        S = list(map(str, sys.stdin.readline().rstrip()))
        if '-' in S: break
        stack = []
        ans = 0
        for y in S:
            if y == '{':
                stack.append(y)
            else:
                if stack:
                    stack.pop()
                else:
                    ans += 1
                    stack.append('{')
        while stack:
            if len(stack) % 2 == 0:
                ans += 1
            stack.pop()
        print(f'{idx}. {ans}')
        idx += 1

 

결과

 

문제풀이나 코드에서 이상한 부분 지적은 언제나 환영합니다!