[코테] 백준 그리디 4889번 문제
4889번 : 안정적인 문자열
문제 링크
https://www.acmicpc.net/problem/4889
문제 설명
여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 여기서 안정적인 문자열을 만들기 위한 최소 연산의 수를 구하려고 한다. 안정적인 문자열의 정의란 다음과 같다.
- 빈 문자열은 안정적이다.
- S가 안정적이라면, {S}도 안정적인 문자열이다.
- S와 T가 안정적이라면, ST(두 문자열의 연결)도 안정적이다.
문자열에 행할 수 있는 연산은 여는 괄호를 닫는 괄호로 바꾸거나, 닫는 괄호를 여는 괄호로 바꾸는 것 2가지이다.
입력
입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 문자열의 길이가 2000을 넘는 경우는 없고, 항상 길이는 짝수이다.
입력의 마지막 줄은 ‘-‘가 한 개 이상 주어진다.
출력
각 테스트 케이스에 대해서, 테스트 케이스 번호와 입력으로 주어진 문자열을 안정적으로 바꾸는데 필요한 최소 연산의 수를 출력한다.
문제 풀이
- 이전 괄호 정보를 저장하여 여는 괄호가 나오면 쌓고, 닫는 괄호가 나오면 쌓은 괄호를 없애는 식으로 진행한다.
- 만약 쌓은 괄호가 없음에도 닫는 괄호가 나오면 여는 괄호로 바꾸고 + 1
- 순차 탐색이 끝난 이후에도 쌓은 괄호가 남아 있으면 쌓은 괄호 2개를 없애고 + 1
result_arr = []
while True :
result = 0
stack_brace = 0
string = input()
if '-' in string :
break
for i in string :
if i == '{' :
stack_brace += 1
elif i == '}' and stack_brace > 0 :
stack_brace -= 1
else :
result += 1
stack_brace += 1
else:
while stack_brace > 0 :
stack_brace -= 2
result += 1
result_arr.append(result)
for i in range(len(result_arr)) :
print("{}. {}".format(i+1, result_arr[i]))
Comments