본문 바로가기
알고리즘/자료구조

[백준][Python] 3986번 좋은 단어

by 임짠짠 2022. 2. 14.
반응형
 

3986번: 좋은 단어

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

www.acmicpc.net

 

코드

n = int(input())

ans = 0
for i in range(n):
    inp = input()
    stack = []
    for j in inp:
        if len(stack) == 0:
                stack.append(j)
        else:
            if j == "A":           
                if stack[-1] == "B":
                    stack.append(j)
                elif stack[-1] == "A":
                    stack.pop()
            elif j == "B":
                if stack[-1] == "A":
                    stack.append(j)
                elif stack[-1] == "B":
                    stack.pop()
    if len(stack)==0:
        ans+=1

print(ans)

설명

일단 이 문제는 괄호 문제라 생각하고 접근하면 된다. 선이 교차한다는 것은 결국 괄호의 짝이 맞지 않다는 것과 같기 때문이다. 그러나 괄호와 같이 여는 괄호, 닫는 괄호가 구분되는 것이 아니기 때문에 조금 더 간단하다.

우선 스택이 비어있을 때 A,B가 오면 그냥 스택에 push해준다. 

만약 A가 나왔을 때 스택의 가장 마지막 값이 A이면 그 값을 pop해주고 만약 B이면 A를 스택에 push 해준다. B가 나왔을 때도 마찬가지이다. 

마지막에 스택에 값이 존재하지 않으면 '좋은 단어'이기 때문에 ans 변수를 1 증가시켜준다. 

반응형

댓글