DHistory
[Baekjoon] Greedy - 4889 안정적인 문자열 본문
문제
4889번: 안정적인 문자열
입력은 여러 개의 데이터 세트로 이루어져 있다. 각 데이터 세트는 한 줄로 이루어져 있다. 줄에는 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 문자열의 길이가 2000을 넘는 경우
www.acmicpc.net
풀이
"""
여는 괄호와 닫는 괄호만 이루어진 문자열이 주어진다.
안정적인 문자열을 만들기 위한 최소 연산의 수를 구하시오.
안정적인 문자열이란?
1. 빈 문자열은 안정적이다.
2. S가 안정적이라면 {S}도 안정적인 문자열이다.
3. S와 T가 안정적이라면, ST도 안정적이다.
연산은 여는 괄호 => 닫는 괄호 / 닫는 괄호 => 여는 괄호
"""
import sys
def solution(line):
if not line:
return 0
queue = []
answer = 0
for value in line:
# 안정적인 괄호인 경우 남은 문자에서 뺀다.
if queue and queue[-1] == '{' and value == '}':
queue.pop()
continue
queue.append(value)
# 남은 문자 중 문자가 동일한 경우 ({{ 혹은 }}인 경우) 1회 변경하여 안정적인 문자열로 변경한다.
# 남은 문자 중 문자가 다른 경우 ()}{인 경우) 2회 변경하여 안정적인 문자열로 변경한다.
for i in range(0, len(queue) - 1, 2):
if queue[i] == queue[i + 1]:
answer += 1
else:
answer += 2
return answer
index = 1
for line in sys.stdin:
if '-' in line:
exit(0)
print("{}. {}".format(index, solution(line.rstrip())), end="\n")
index += 1
채점 결과
'Computer Science > Algorithm' 카테고리의 다른 글
[Baekjoon] Greedy - 1911 흙길 보수하기 (0) | 2023.08.30 |
---|---|
[Baekjoon] Greedy - 17615 볼 모으기 (0) | 2023.08.30 |
[Baekjoon] Greedy - 1105 팔 (생각노트) (0) | 2023.08.29 |
[Baekjoon] Greedy - 15903 카드 합체 놀이 (0) | 2023.08.29 |
[Baekjoon] Greedy - 1080 행렬 (0) | 2023.08.29 |