Algorithm/BOJ
[Kotlin] 백준 3447 : 버그왕
개발하는 곰돌이
2023. 10. 14. 14:03
문제 링크
문제 해설
주어진 입력에서 BUG라는 문자열을 모두 제거하면 된다.
우선 입력을 EOF까지 받기 때문에 아래와 같은 형태처럼 입력이 null
이 아닐 때까지 입력받는 반복문으로 처리해야 한다.
var s: String?
while (readLine().also { s = it } != null) {
...
}
BUG라는 문자열을 모두 제거하기 위해 단순히 replace()
로 처리하면 되긴 하지만 출력 설명의 예시를 잘 주목해야 한다.
즉, 입력으로 주어진 어떤 문자열에 BBUGUBUGG와 같은 형태로 BUG의 각 문자 사이에 BUG가 끼어드는 경우를 생각해볼 수 있다. 이 때 한번의 replace()
로 BUG를 제거하면 BBUGUBUGG → BUG가 된다.
이 경우에도 BUG를 제거해야 하기 때문에 반복문을 통해 입력으로 주어진 문자열에 BUG가 포함되어 있다면 반복해서 BUG를 제거하는 것으로 구현할 수 있다.
Code
fun main() = with(System.`in`.bufferedReader()) {
val bw = System.out.bufferedWriter()
var s: String?
while (readLine().also { s = it } != null) {
while (s!!.contains("BUG")) s = s!!.replace("BUG", "")
bw.write("$s\n")
}
bw.close()
}
여담
여담으로 평소에는 EOF까지 입력을 받는 문제에서 != null
를 사용하면 로컬에서 테스트하기가 어렵기 때문에 isNullOrEmpty()
에 !
연산자를 붙이는 것을 선호하는데 이 문제에서는 빈 문자열도 입력으로 주어지기 때문에 사용할 수 없었다.