Programming/백준

[실버 4] 백준 3986 - 좋은 단어 (파이썬)

pental 2025. 4. 22. 08:34

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

풀이

좋은 단어란 연속된 두 문자가 항상 짝을 이뤄서 서로 제거되며, 최종적으로 아무 글자도 남지 않는 단어를 의미한다.

예를 들어서 AABB → A-A, B-B 가 짝지어 제거되므로 좋은 단어이다.

stack = []
for s in S:
    if len(stack) == 0 or stack[-1] != s:
        stack.append(s)
    else:
        stack.pop(-1)

각 문자를 순서대로 읽으면서 스택을 이용해서 처리한다.

  • 스택이 비어있거나, 스택의 마지막 문자와 현재 문자가 다르면 현재 문자를 스택에 push한다.
  • 스택의 마지막 문자와 현재 문자가 다르면 pop하여 짝짔는다.
if len(stack) == 0:
    count += 1

스택이 비어있다는 것은 모든 문자가 짝지어졌다는 뜻이므로, 좋은 단어이다. 따라서 카운트를 1증가시킨다.

코드

# 백준 3986 - 좋은 단어
# 분류 : 스택

N = int(input())

count = 0
for _ in range(N) :
    S = input()
    
    stack = []
    for s in S :
        if len(stack) == 0 or stack[-1] != s :
            stack.append(s)
        else :
            stack.pop(-1)
    
    if len(stack) == 0 :
        count += 1

print(count)