본문 바로가기

Algorithm & Data Structure

백준 - 9935번(스택)

728x90
반응형

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

 

9935번: 문자열 폭발

첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모

www.acmicpc.net

 

import sys

arr = list(str(sys.stdin.readline().rstrip()))
key = list(str(sys.stdin.readline().rstrip()))

stack = []

for i in arr:
    stack.append(i)
    if i == key[-1] and stack[-len(key):] == key:
        del stack[-len(key):]


if len(stack) == 0:
    print('FRULA')
else:
    ans = ''.join(stack)
    print(ans)

정신 나간 문제다. 코드 길이 대비 시간 투자 한 문제 1위다.
stack은 arr의 앞에서 부터 쌓아주고 key는 -1부터 봐주는 걸 떠올리지 못하면 절대 풀지 못한다.
(사실 절대는 아니고 다른 방법이 있겠지만 나는 모르겠다.)
왜 이걸 못떠올려서 헤매었을까... stack은 위로 쌓이는 구조다. 따라서 가장 앞에 본 것이 가장 밑에 깔린다.
그럼 가장 위에서 꺼낼 수 있는건 가장 마지막 원소 이므로 비교대상이 되는 key를 뒤에서부터 탐색해준다.
그렇지만 추천할 만한 문제다.

728x90
반응형

'Algorithm & Data Structure' 카테고리의 다른 글

백준 - 1149번(DP)  (0) 2022.03.31
백준 - 1004번(기하)  (0) 2022.03.31
백준 - 2493번(스택)  (0) 2022.03.31
백준 - 10828번(스택)  (0) 2022.03.31
백준 - 17608번(스택)  (0) 2022.03.31