본문 바로가기
코딩테스트

[프로그래머스] 문자열 잘라서 정렬하기

by liz_devel 2025. 1. 24.


📝 나의 문제풀이

class Solution {
    fun solution(myString: String): Array<String> {
      return  myString.split("x").filter{ it.isNotEmpty() }.sorted().toTypedArray()
    }
}

 


📝 다른 사람의 문제 풀이

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

class Solution {
    fun solution(myString: String) = myString.split("x".toRegex()).filter(String::isNotEmpty).sorted()
}

🖊 문제 풀이 시 알면 좋을 것

split 함수

  • 문자열을 특정 구분자 기준으로 나눌 때 사용.
  • 예제에서 "x"를 기준으로 나눔.
val str = "axbxc"
val result = str.split("x") // ["a", "b", "c"]

 

  • 정규식을 사용할 때는 .toRegex() 추가.
val result = str.split("x".toRegex()) // 동일 결과

 

* 위 예시로는 결과가 동일한데 왜 정규식을 사용해? 정규식은 어느 경우에 사용하는 거야??

 

  • 단순한 문자열을 기준으로 나눌 땐 split("x") 사용이 더 간단하고 성능도 좋음.
  • 하지만 확장 가능성이 필요한 경우(여러 구분자, 패턴 매칭)엔 정규식을 사용하는 게 더 강력한 도구가 될 수 있어. 문제에 따라 필요에 맞게 선택하면 돼!

정규식을 사용하는 이유: 복잡한 패턴 처리

정규식을 사용하면 단순 구분자를 넘어 다양한 패턴으로 문자열을 나눌 수 있어.

예시 1. 여러 구분자를 한 번에 처리

이 예시에서는 "x"뿐만 아니라 숫자(0-9)도 구분자로 사용.

val str = "a1xb2yc3"
val result = str.split("[x0-9]".toRegex()) // ["a", "b", "c"]

 

 

예시 2. 공백 및 여러 문자 처리

여러 구분자(쉼표, 세미콜론, 공백 등)를 한 번에 처리.

val str = "a, b; c   d"
val result = str.split("[,;\\s]+".toRegex()) // ["a", "b", "c", "d"]

 

filter 함수

  • 조건을 만족하는 요소만 남길 때 사용.
val list = listOf("", "a", "b", "")
val filtered = list.filter { it.isNotEmpty() } // ["a", "b"]

 

함수 참조(String::isNotEmpty)로 더 간결하게 작성 가능.

list.filter(String::isNotEmpty)

 

sorted 함수

  • 컬렉션을 오름차순(사전순)으로 정렬.
val list = listOf("banana", "apple", "cherry")
val sorted = list.sorted() // ["apple", "banana", "cherry"]

 

toTypedArray 함수

  • 리스트를 배열로 변환.
val list = listOf("a", "b", "c")
val array = list.toTypedArray() // arrayOf("a", "b", "c")
반응형