본문 바로가기
코딩테스트

[프로그래머스] 세 개의 구분자

by liz_devel 2025. 1. 24.

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(myStr: String): Array<String> {
        return myStr.split("[a-c]".toRegex()).filter{ it.isNotEmpty() }.toTypedArray().ifEmpty{ arrayOf("EMPTY") }
    }
}

 


📝 다른 사람의 문제 풀이

다른 사람의 문제 풀이는 좋아요 수가 높거나 많은 사람들이 푼 방법 기준으로 첨부하였습니다.

class Solution {
    fun solution(myStr: String): List<String> {
        return myStr.split("[abc]+".toRegex()).filter(String::isNotEmpty).let { it.ifEmpty { listOf("EMPTY") } }
    }
}

🖊 문제 풀이 시 알면 좋을 것

split 함수

  • split은 문자열을 특정 구분자를 기준으로 나눌 때 사용.
  • 정규식을 사용해 범위나 패턴으로 문자열을 나눌 수 있음.
val result = "helloabcworld".split("[a-c]".toRegex()) // ["hello", "world"]

 

  • "a-c"는 a, b, c 중 하나를 의미.
  • "[abc]+"는 a, b, c가 연속적으로 나오는 경우 한 번에 구분.

 

filter로 빈 문자열 제거

  • split 결과에서 빈 문자열을 제거하려면 filter 사용.
val result = listOf("", "hello", "", "world").filter { it.isNotEmpty() } // ["hello", "world"]

 

 

String::isNotEmpty를 함수 참조로 간결히 작성 가능:

 


📌 마치며

내 문제풀이에서는 "[a-c]" 사용으로 개별 문자 처리를 하였으나 다른 사람 문제풀이에서는 "[abc]+"로 연속된 문자도 처리하였다.

이를 바탕으로 리스트와 배열 모두 커버할 수 있도록 개선된 코드

class Solution {
    fun solution(myStr: String): Array<String> {
        return myStr.split("[abc]+".toRegex())
            .filter(String::isNotEmpty)
            .ifEmpty { listOf("EMPTY") }
            .toTypedArray() // 리스트를 배열로 변환
    }
}
반응형