////
Search

문자열 폭발

소스코드

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’를 출력합니다.

복기

풀고나서는 “시간복잡도를 고려하지 않고 무의식적으로 풀었다”라는 생각을 했습니다. 그렇지만 못 푼 분들 중 저보다 잘하시는 분들 중에 시간복잡도 생각해보다가 다른 걸로 시도했는데 안 됐다고 하는 분이 계셨습니다.
너무 시간복잡도를 생각하면 오히려 안 풀리기도 하는구나를 조금은 느꼈습니다.
어쩌면 생각나는대로 최선의 방법으로 시도해보고, 시간초과나 메모리초과같은 문제가 발생하면 그때 다른 방법으로 유연하게 대처할 생각을 하는 방향으로 알고리즘 문제를 풀어내는 실력을 길러야겠다고 생각했습니다.
역시 돌고돌아 유연한 사고력이네요. 참 쉬운 듯 얻기 어려운 능력 같습니다.