문제 링크
문제 해설
스택을 사용하여 해결할 수 있다. 문제 해결 과정은 다음과 같다.
- 먼저 문자열을 앞에서부터 순회하면서 스택에 문자를 삽입한다.
- 스택에 문자를 삽입하는 도중에 폭발 문자열의 마지막 글자가 나타나면 폭발 문자열의 길이만큼 스택에서 문자를 제거하여 폭발 문자열인지 체크할 문자열을 만든다.
- 이 때 스택에서 현재 스택의 크기가 폭발 문자열의 길이보다 작을 수 있기 때문에 EmptyStackException을 방지하기 위한 체크 로직을 작성해줘야한다.(이거 안해서 틀림)
- 스택에서 문자를 제거하여 만든 체크 문자열은 역순으로 이루어지기 때문에 문자열을 뒤집고 폭발 문자열과 비교한다.
- 체크 문자열과 폭발 문자열이 다른 경우엔 체크 문자열을 다시 스택에 삽입한다. 같은 경우엔 이미 스택에서 문자를 제거했으므로 추가 연산 없이 다음 문자로 넘어간다.
모든 과정을 거쳤을 때 스택이 비어있다면 FRULA를, 그 외에는 스택의 문자들을 joinToString()
을 사용해 출력하면 된다.
Code
import java.util.Stack
fun main() = with(System.`in`.bufferedReader()) {
val str = readLine()
val bomb = readLine()
val stack = Stack<Char>()
for (c in str) {
stack.push(c)
if (c == bomb.last()) {
var checkBombString = StringBuilder()
for (i in bomb.indices) {
if (stack.isEmpty()) break
checkBombString.append(stack.pop())
}
checkBombString = checkBombString.reverse()
if (checkBombString.toString() != bomb) {
repeat(checkBombString.length) { stack.push(checkBombString[it]) }
}
}
}
println(if (stack.isEmpty()) "FRULA" else stack.joinToString(""))
}
'Algorithm > BOJ' 카테고리의 다른 글
[Kotlin] 백준 25192 : 인사성 밝은 곰곰이 (0) | 2022.12.21 |
---|---|
[Kotlin] 백준 14277 : 등차 수열과 등비 수열 (0) | 2022.12.21 |
[Kotlin] 백준 1806 : 부분합 (0) | 2022.12.17 |
[Kotlin] 백준 25916 : 싫은데요 (0) | 2022.12.16 |
[Kotlin] 백준 11387 : 님 무기가 좀 나쁘시네여 (0) | 2022.12.15 |
댓글