공부/백준

[Python] 3986: 좋은 단어

BeepMaeae 2025. 5. 5. 15:31

 

 

문제 링크

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

 

 

 

선이 교차하지 않아야 한다는 조건만 정확하게 파악한다면 쉽게 풀 수 있는 문제다.

 

1. 연속된 문자들을 제거하고 봤을 때도 연속된 문자가 있어야 한다.

2. 문자가 끝났을 때 쌍을 이루지 못하는 문자가 남아있으면 안 된다.

 

Stack을 이용해서 첫 문자 또는 연속하지 않는 문자를 push해주고, 연속되면 pop으로 빼주면 되는 쉬운 문제가 된다.

n = int(input())
cnt = 0

for _ in range(n):
    stack = []
    str = list(input())

    for i in str:
        if not len(stack):  # 스택이 비었으면 추가
            stack.append(i)
        elif stack[-1] == i:  # 같은 문자가 연속되면 제거
            stack.pop(-1)
        else:
            stack.append(i)  # 다르면 스택에 추가

    if not len(stack):  # 스택이 비었으면 좋은 단어
        cnt += 1

print(cnt)

 

해보진 않았지만 2번째 if문의 경우 아마 str에서 직전 문자를 직접 비교해도 상관 없긴할 것이다.

'공부 > 백준' 카테고리의 다른 글

[Python] 3015: 오아시스 재결합  (0) 2025.05.05
[Python] 1918: 후위 표기식  (0) 2025.05.05
[Python] 2841: 외계인의 기타 연주  (1) 2025.05.05
[Python] 10799: 쇠막대기  (0) 2025.05.05