3986번: 좋은 단어
이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에
www.acmicpc.net
알고리즘 : 스택
난이도 : 실버Ⅳ
1. 문제요약
- A와 B로 이루어진 문자열이 여러개 주어지는데, 각 문자열에서 A끼리 및 B끼리 선을 이어주며 짝을 지을때, 선끼리 교차되지 않고 모든 문자를 짝지을 수 있는 문자열(ex AABB, ABBA 등)의 개수를 세는 문제이다.
- 시간제한은 1초이고 모든 문자열의 길이의 합은 최대 1,000,000이므로 시간복잡도가 $O(n^2)$가 되지 않도록 유의한다.
2. 구현과정
- 스택으로 구현할 것이다. 문자열들의 개수 N을 입력으로 받고, for문으로 N만큼 반복하면서 문자열을 ABstring에 입력으로 받아 시작한다.
- ABstring을 순회하면서 스택의 탑에 있는 문자와 동일하다면 스택을 팝해주고, 스택이 비었거나 탑에 있는 문자와 다르다면 스택에 푸쉬해 준다.
- 순회를 마쳤을때 스택이 비어있다면 좋은 단어에 해당한다.
3. 파이썬 코드
import sys
input = lambda: sys.stdin.readline().rstrip()
N = int(input())
answer = 0
for _ in range(N):
ABstring = input()
stack = []
for chr in ABstring:
if stack and chr == stack[-1]:
stack.pop()
else:
stack.append(chr)
if not stack:
answer += 1
print(answer)
'공부 > 알고리즘 문제풀이 기록' 카테고리의 다른 글
[백준 7576] 토마토 (0) | 2023.12.04 |
---|---|
[백준 10799] 쇠막대기 (0) | 2023.11.30 |
[백준 4949] 균형잡힌 세상 (1) | 2023.11.28 |
[백준 5430] AC (3) | 2023.11.26 |
[백준 1021] 회전하는 큐 (1) | 2023.11.26 |