sw/알고리즘
백준 3986 좋은 단어
넉넉-
2022. 12. 7. 19:05
https://www.acmicpc.net/problem/3986
문제
- N개 줄에는 A와 B로만 이루어진 단어가 주어진다.
- 단어 위로 아치형 곡선을 그어 같은 글자끼리(A는 A끼리, B는 B끼리) 쌍을 짓는다. 이때 글자 1개 당 하나의 곡선만 그을 수 있다.
- 만약 선끼리 교차하지 않으면서 모든 글자를 짝 지을수 있다면 '좋은 단어'다.
- 주어진 N개의 단어 중 '좋은 단어'의 개수를 구한다.
나의 풀이
- 이 문제 풀이에 필요한 기본 원칙은 같은 글자 중 서로 완전히 접한 글자 부터 연결해야한다.
- 위의 원칙을 구현하는 가장 좋은 방법은 stack 이다.
import sys
import collections
n = int(sys.stdin.readline().strip())
cnt=0
q = collections.deque()
for _ in range(n):
input=sys.stdin.readline().strip()
for s in input:
if len(q) ==0:
q.append(s)
elif q[-1] ==s:
q.pop()
else:
q.append(s)
if len(q) ==0: #좋은 단어 성공일 경우 cnt + 1
cnt+=1
q.clear()
else:
q.clear()
print(cnt)
오답노트
- 원칙을 생각해내지 못해서 시간을 많이 빼았겼음.
- 아직도 왜 저 원칙이 적용되는지 완벽히 이해는 안됨.여러번 봐야할 듯