소스코드
import sys
input = sys.stdin.readline
strings = input().strip()
bomb_string = input().strip()
bomb_length = len(bomb_string)
stack = []
for char in strings:
char.append(char)
if len(stack) >= bomb_length and ''.join(stack[-bomb_length:]) == bomb_string:
for _ in range(bomb_length):
stack.pop()
result = ''.join(stack)
print(result if result else "FRULA")
Python
복사
풀이
•
끝나고 몇 사람과 얘기해보니, 오히려 스택말고 다른 걸 생각해서(시간복잡도를 우려하고) 못 푼 분들이 종종 있었습니다. 그냥 단순하게 스택으로 해보자고 생각해고 시도했다면 됐을 수도 있을 듯 합니다.
•
입력으로 받은 문자열을 순회하면서
◦
각 문자를 스택에 append합니다
◦
만약 스택의 길이가 폭발 문자열의 길이보다 크거가 같고, 폭발 문자열의 개수만큼 스택의 뒷 인덱스에서 슬라이싱한 결과가 폭발 문자열과 동일하다면
▪
폭발 문자열 길이만큼 스택에서 pop합니다
•
스택을 이어붙입니다
•
문자열이 남아있다면 그대로 출력, 아니라면 ‘FRULA’를 출력합니다.
복기
•
풀고나서는 “시간복잡도를 고려하지 않고 무의식적으로 풀었다”라는 생각을 했습니다. 그렇지만 못 푼 분들 중 저보다 잘하시는 분들 중에 시간복잡도 생각해보다가 다른 걸로 시도했는데 안 됐다고 하는 분이 계셨습니다.
◦
너무 시간복잡도를 생각하면 오히려 안 풀리기도 하는구나를 조금은 느꼈습니다.
◦
어쩌면 생각나는대로 최선의 방법으로 시도해보고, 시간초과나 메모리초과같은 문제가 발생하면 그때 다른 방법으로 유연하게 대처할 생각을 하는 방향으로 알고리즘 문제를 풀어내는 실력을 길러야겠다고 생각했습니다.
•
역시 돌고돌아 유연한 사고력이네요. 참 쉬운 듯 얻기 어려운 능력 같습니다.
