개발공부/algorithm

[백준][python] 4889 안정적인 문자열 - Greedy

so.py 2021. 4. 25. 15:22

 

4889번: 안정적인 문자열

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

www.acmicpc.net

나의 접근

  1. '{' 인 경우에는 stack에 추가해준다.
  2. '}' 인 경우에는
    1. stack이 비어있을 경우, '{'로 바꾸어서 stack에 추가해준 후 count를 추가한다.
    2. stack이 비어있지 않을 경우, 가장 상위의 원소를 pop 해준다.
  3. stack에 남아있는 원소들의 개수를 2로 나누어 주면 해당 스택이 안정적인 문자열이 되기 위해 필요한 작업의 최소 수를 알아낼 수 있다.
  4. 최종적으로 len(stack) // 2 + count 해주면 된다.
tc = 0
while True:
    stack = []
    tc += 1
    s = list(input())
    if '-' in s:
        break

    count = 0

    for i in range(len(s)):
        if s[i] == '{':					#1
            stack.append(s[i])

        elif s[i] == '}':				
            if len(stack) == 0:			# 2.1
                stack.append('{')
                count += 1
            else:						# 2.2
                stack.pop()
    
    print('{}. {}'.format(tc, len(stack) // 2 + count))	# 3