https://www.acmicpc.net/problem/9935
9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
# 9935
# 문자열 폭발
from collections import deque
string = input()
popping_string = list(input())
last_ch = popping_string[-1]
que = deque([])
for i in range(len(string)):
if string[i] == last_ch and len(que) >= len(popping_string) - 1: # 폭발 문자의 마지막 글자와 같고, 앞의 글자들까지 확인할 정도의 길이가 된다면
# 폭발 문자와 같은지 확인하기
check = False
for j in range(1, len(popping_string)):
if que[len(que) - j] != popping_string[len(popping_string) - 1 - j]:
break
else:
check = True
if check is True: # 폭발 문자와 같다면 삭제
for j in range(len(popping_string) - 1):
que.pop()
else: # 폭발 문자가 아니라면 추가
que.append(string[i])
else:
que.append(string[i])
if que:
print("".join(que))
else:
print("FRULA")
코드 설명
- 입력받은 문자열의 문자를 앞에서부터 하나씩 확인한다.
- 만약 문자가 폭발 문자열의 마지막 문자와 동일하지 않다면, deque(stack으로 이용)의 자료에 추가한다.
- 만약 문자가 폭발 문자열의 마지막 문자와 동일하다면, 이전의 문자도 확인하여 폭발 문자열과 같은지 확인한다.
- 폭발 문자열과 같은 문자열을 발견하면 stack에서 삭제한다.
- 모든 확인이 끝난 후 stack의 문자를 출력한다.
- stack에 남은 문자가 없다면 "FRULA"를 출력한다.
'Python 알고리즘 공부 > 백준 알고리즘 공부' 카테고리의 다른 글
가장 가까운 같은 글자 (python) (0) | 2023.05.22 |
---|---|
11718: 그대로 출력하기 (python) (0) | 2023.03.23 |
2447: 별 찍기 - 10 (python) (0) | 2023.01.14 |
25501: 재귀의 귀재 (python) (0) | 2023.01.07 |
10870: 피보나치 수 5 (python) (0) | 2023.01.07 |
댓글