알고리즘 문제(SOL)

[백준/3986/파이썬] 좋은 단어

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

 

3986번: 좋은 단어

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

www.acmicpc.net

조건

  • 단어 위로 아치형 곡선을 그어 같은 글짜끼리 쌍을 지었을때, 선끼리 교차하지 않으면서, 다른 한 개의 다른 위치에 있는 같은 글자와 짝을 지을 수 있다면, 좋은 단어임.
  • 좋은단어의 갯수를 구하자.

입력

  • A와B로만 이루어진 단어가 한줄에 하나씩 주어진다.

이번 문제도, 문제 자체가 , 이해하기가 어려웠음. 그래서, 진짜 위에 아치를 그려보면서 해보니까

이런말이란 걸 알았음. 밑은 좋은 단어의 예시임!

Input값이랑 stk의 TOP값이 다르면, stack에 넣고, stk의 TOP과 같으면, POP 해주고.

모든 연산을 했을때, 스택이 비어있으면 , 얘는 좋은 단어겠죠?

이런게 좋은단어

 

import sys

input = sys.stdin.readline
n= int(input())
words = [list(input().strip()) for _ in range(n)]
cnt=0


for word in words:
	stk=[]
	for i in range(len(word)):
		if not stk:
			stk.append(word[i])
		else:
			if stk[-1]==word[i]:
				stk.pop()
			else:
				stk.append(word[i])
		if not stk:
			cnt+=1

print(cnt) 

#이렇게 표현될 수 있을거 같음.