출처 : 백준 #9935
시간 제한 | 메모리 제한 |
---|---|
2초(추가 시간 없음) | 128MB |
상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다.
폭발은 다음과 같은 과정으로 진행된다.
상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다.
남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다.
폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다.
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다.
둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다.
두 문자열은 모두 알파벳 소문자와 대문자, 숫자 0, 1, ..., 9로만 이루어져 있다.
첫째 줄에 모든 폭발이 끝난 후 남은 문자열을 출력한다.
mirkovC4nizCC44
C4
mirkovniz
12ab112ab2ab
12ab
FRULA
다음과 같은 생각의 흐름대로 코드를 구성하였다.
string
에 exp
가 있다면 string
의 길이 - i
가 0과 같거나 작아질 때까지 while문을 돌린다.string
속에 있는 exp
를 제거하여 준다. (슬라이싱 이용)exp
가 없으면 while문을 끝내고, 아니라면 1,2 과정을 반복한다.문제점
exp in string
연산과 슬라이싱 연산의 시간이 오래걸려서 시간초과가 떠버렸다.# 백준 9935번 문자열 폭발
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
string = input().rstrip()
exp = input().rstrip()
def solution(string, exp):
m = len(exp)
while exp in string:
n = len(string)
i = 0
temp = ""
while n - i> 0:
if string[i:i+m] == exp:
i += m
else:
temp += string[i]
i += 1
string = temp
temp = string # UnboundLocalError
return temp if len(temp) > 0 else "FRULA"
print(solution(string, exp))
다음과 같은 생각의 흐름대로 코드를 구성하였다.
temp
에 string
의 문자를 하나씩 넣는다.느낀점
# 백준 9935번 문자열 폭발
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
string = input().rstrip()
exp = input().rstrip()
def solution(string, exp):
n = len(string)
m = len(exp)
temp = []
for i in range(n):
temp.append(string[i])
if len(temp) >= m:
if temp[-1] == exp[-1]:
flag = True
# len(temp) = 8 -> 7, 6
# len(exp) = 2 -> 1, 0
for x in range(len(temp)-1, len(temp)-m-1, -1):
if temp[x] != exp[x-(len(temp)-m)]:
flag = False
break
if flag: # 만약 temp의 끝 부분들이 exp와 같다면 제거해야 함.
for y in range(m):
temp.pop()
result = ""
for i in range(len(temp)):
result += temp[i]
return result if len(result) > 0 else "FRULA"
print(solution(string, exp))
++
from sys import stdin
from collections import deque
input = stdin.readline
string = list(input().rstrip())
virus = list(input().rstrip())
n = len(virus)
r = []
for _ in string:
r += [_]
if r[-n:]==virus:
r[-n:] = []
if len(r)==0:
print("DOOMSDAY")
else:
print("".join(r))