9935-g4 성공
This commit is contained in:
94
workbook_8708/gold/9935-g4.py
Normal file
94
workbook_8708/gold/9935-g4.py
Normal file
@@ -0,0 +1,94 @@
|
||||
# 문자열 폭발
|
||||
|
||||
import sys
|
||||
|
||||
input = sys.stdin.readline
|
||||
|
||||
def solution():
|
||||
s = input().rstrip()
|
||||
stack = []
|
||||
result = ""
|
||||
bomb = input().rstrip()
|
||||
|
||||
for ch in s:
|
||||
stack.append(ch)
|
||||
if stack[-1] == bomb[-1]:
|
||||
idx = 0
|
||||
while len(stack) >= len(bomb) and idx < len(bomb):
|
||||
if stack[-1-idx] != bomb[-1-idx]:
|
||||
result += "".join(stack)
|
||||
stack = []
|
||||
break
|
||||
idx += 1
|
||||
if idx == len(bomb):
|
||||
for _ in range(len(bomb)):
|
||||
stack.pop()
|
||||
|
||||
result += "".join(stack)
|
||||
if not result:
|
||||
print("FRULA")
|
||||
else:
|
||||
print(result)
|
||||
return
|
||||
|
||||
solution()
|
||||
|
||||
"""
|
||||
걸린 시간: 34분
|
||||
|
||||
시간 복잡도: 한 문자당 상수번 다뤄지기 때문에 O(n)이다.
|
||||
|
||||
해설: 처음에는 bomb 문자열의 순서와 쌍을 기록하는 방식으로 연결관계를 계속 파악하려고 했다. 그렇다보니 조건 분기가 많아졌고,
|
||||
틀렸을 때는 어디가 잘못됐을지 감도 안 잡혀서 과감하게 다른 풀이로 전향했다.
|
||||
좀 더 생각을 해보니 문자를 볼때 bomb의 마지막 문자일때만 이미 들어갔던 것들을 쭉 보고 만약에 bomb이 아니라면
|
||||
지금까지 본 문자열은 앞으로도 절대 폭발할 수 없다는 것을 깨달았다.
|
||||
따라서 방금 과정을 진행한 후 폭발하지 않았다면 stack에 있는 모든 문자를 다시는 보지 않기 위해 stack에서 빼고 문자열로 바꿔놓는다.
|
||||
만약 폭발했다면 stack에 남아있는 것들이 또 연결되어 폭발할 수 있으므로 남겨놓는다.
|
||||
"""
|
||||
|
||||
# def solution(): # 12:25~ 1:15 실패
|
||||
# s = input().rstrip()
|
||||
# bomb = {ch: i+1 for i, ch in enumerate(input().rstrip())} # start 1~
|
||||
# # print(bomb)
|
||||
# dq = deque([])
|
||||
# group = 0
|
||||
# no_group = -1
|
||||
# for i, ch in enumerate(s):
|
||||
# # b = -1
|
||||
# bomb_order = bomb.get(ch, -1)
|
||||
# if bomb_order == 1:
|
||||
# group += 1
|
||||
# dq.append((bomb_order, group, i))
|
||||
# # b = 1
|
||||
|
||||
# elif not dq:
|
||||
# dq.append((bomb_order, no_group, i))
|
||||
# # b = 2
|
||||
|
||||
# elif bomb_order == len(bomb) and dq[-1][0] == len(bomb)-1:
|
||||
# now_group = dq[-1][1]
|
||||
# while dq and dq[-1][1] == now_group:
|
||||
# dq.pop()
|
||||
# # b = 3
|
||||
# elif bomb_order == dq[-1][0]+1:
|
||||
# dq.append((bomb_order, dq[-1][1], i))
|
||||
# # b = 4
|
||||
|
||||
# else:
|
||||
# dq.append((bomb_order, no_group, i))
|
||||
# # b = 5
|
||||
# # print(b, dq)
|
||||
|
||||
# result = ""
|
||||
# while dq:
|
||||
# result += s[dq.popleft()[2]]
|
||||
|
||||
# if not result:
|
||||
# print("FRULA")
|
||||
# else:
|
||||
# print(result)
|
||||
|
||||
# return
|
||||
|
||||
|
||||
# solution()
|
||||
Reference in New Issue
Block a user