티스토리 뷰

https://www.acmicpc.net/problem/4889

 

4889번: 안정적인 문자열

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

www.acmicpc.net

 

 

 

👩‍💻문제 이해

입력된 문자열 전체에서 생각하지 말고, 기준을 잡고, 한 단위씩('{}') 끊어서 생각하면 편하다.

'{}' 닫힌 형태가 나오면 안정적인 문자열인 것이다.

그래서 첫 문자가 '{'가 나올 때까지 count를 해주고 그 문자는 pop으로 빼준다음, '{'가 나오면 그때부터 다시 한 단위씩 생각하면 된다.

기준은 '{' 가 된다.

 

풀이법

1. 기호 '{'를 추가할 빈 리스트 stack를 만들어준다.

2. 문자열을 탐색하면서 1) 빈 문자열에 '}'이 나올 경우 -> count를 +1 해준다. 

                                    2) stack에 '{'이 담겨 있을 때, '}'이 나올 경우 -> (안정적인 문자열 한쌍 완성) stack에서 '{'를 pop으로 빼주어 다시 stack을 빈 문자열로 만들어준다.

                                    3) stack에 '{'이 담겨 있을 때, '{'이 나올 경우 -> stack에 추가

3. (stack 리스트 길이) // 2 와 count를 더한 값을 answer 리스트에 추가

-( // 2) 를 해주는 이유는 ex) '{{'로 끝났을 때 -> 1개만 수정하면 됨

                                             '{'로 끝났을 때 -> 안정된 문자열을 만들 짝이 없으므로 0 

4. 답을 포맷에 맞게 출력

 

 

👩‍💻'{'를 기준으로 판단 : 성공🌈

answer = []

while True:
    stack = []
    count = 0
    s = input()
    if '-' in s:
        break
    for i in range(len(s)):
        if not stack and s[i] == '}':
            count += 1
            stack.append('{')
            print(stack)
        elif stack and s[i] == '}':
            print(stack)
            stack.pop()
            print(stack)

        else:
            stack.append(s[i])
            print(stack)
    count += len(stack)//2
    answer.append(count)

for i in range(len(answer)):
    print(i+1, '. ', answer[i], sep='')

 

 

 

 

 

Point

list A가 비어있을 때,
not A -> True
댓글
최근에 올라온 글
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Total
Today
Yesterday