개발 연습장/백준 문제풀이

[파이썬, Python] 백준 3986: 좋은 단어

LooanCheong 2023. 7. 7. 11:32
반응형

문제

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

 

3986번: 좋은 단어

이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에

www.acmicpc.net

코드

n = int(input())
cnt = 0

for _ in range(n):
    s = input()
    stack = []
    
    for i in s:
        if stack and stack[-1] == i:
            stack.pop()
        else:
            stack.append(i)
            
    if not stack:
        cnt += 1
        
print(cnt)

설명

우선 n을 받아주고,
정답을 카운트할 cnt를 만들어준다.

그리고 n의 수만큼 반복해서 반복문을 돌린다.

반복문에서 각각 문장을 입력받아준다.
그리고 문장을 처리할 스택을 하나 만들어준다.

좋은 단어의 조건을 만족하려면
같은 단어 사이에 다른 단어가 없거나,
짝수 개로만 존재해야 한다.
ex) abba, aabb 등

따라서 스택을 만들어서 각 단어를 하나씩 넣어주고,
stack의 제일 끝단어(앞에서 처리되지 않은 단어)가 현재의 단어와 같다면 스택에서 pop을 해준다.

그렇지 않은 경우는 입력되는 단어를 스택에 추가해 준다.

모든 과정이 종료되고 스택이 남아있지 않다면 cnt를 1 늘려준다.

최종적으로 cnt를 출력해 준다.

반응형