본문 바로가기
  • 개발하는 곰돌이
Algorithm/BOJ

[Kotlin] 백준 3447 : 버그왕

by 개발하는 곰돌이 2023. 10. 14.

문제 링크

 

3447번: 버그왕

입력은 여러 줄의 소스 코드로 이루어져 있다. 이 소스 코드는 백준이가 작성한 버그를 찾는 프로그램으로 이미 처리가 되어있다. 각 줄은 100글자 이내이고, 입력은 파일이 끝날 때 끝난다. 줄의

www.acmicpc.net


문제 해설

주어진 입력에서 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()!연산자를 붙이는 것을 선호하는데 이 문제에서는 빈 문자열도 입력으로 주어지기 때문에 사용할 수 없었다.

댓글