BOJ 9935번 문자열 폭발
문제
접근
문자열 문제를 아직 많이 다뤄보지 못해서 처음 접근할 때 어려움이 있었다.
주어진 문자열에서 폭발 문자열을 찾고 모두 지우면 되는데, 문자열을 지우고 난 후 연쇄적으로 생성되는 폭발 문자열도 지워야 하는 게 어려운 점이었다.
예를 들어, 문자열이 ACC44
, 폭발 문자열이 C4
인 경우 앞에서부터 폭발문자열의 검사를 시작하면 끝마쳤을 때 AC4
가 남게된다. 이후 한번 더 검사를 해야 최종문자열 A
만 남는다.
그래서 처음에는 앞에서부터 폭발 문자열을 찾는 알고리즘을 함수로 만들고, 폭발 문자열을 검색할 수 없을 때 까지 재귀적으로 실행하려 했다.
몇 번 실패하고 다른 사람들의 풀이를 참고해보니, 문자열을 뒤에서부터 검색하면 굳이 재귀를 하지 않아도 되는 방법이 있었다.
- 입력 문자열의 앞에서부터 한 문자씩 stack에 추가한다.
- 추가한 문자가 폭발 문자열의 마지막 문자와 일치하면, 문자의 앞쪽으로 폭발 문자열과 일치하는지 검사한다. 일치한다면 stack에서 폭발 문자열을 제거한다.
- 입력 문자열의 모든 문자를 검사하고, stack에 원소가 남아있다면 원소를 string으로 바꿔 출력한다. 없다면,
'FRULA'
를 출력한다.
풀이
1 | import sys |