본문 바로가기
코딩테스트

[프로그래머스] 숨어있는 숫자의 덧셈 (2)

by liz_devel 2025. 12. 22.

🗒 문제


📝 나의 문제풀이

class Solution {
    fun solution(my_string: String): Int {
       return Regex("\\d+").findAll(my_string)
            .map{ it.value.toInt() }.sum()
    }
}

📝 다른 사람의 문제 풀이

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

class Solution {
    fun solution(my_string: String): Int  = 
    my_string.split("[A-z]+".toRegex())
        .filter(String::isNotEmpty)
        .sumOf(String::toInt)
}

🖊 문제 풀이 시 알면 좋을 것

 

 

  • Regex("\\d+")
    • \d → 숫자 0~9
    • + → 연속된 숫자 1회 이상
    • 따라서 "123abc45"에서 "123"과 "45"를 각각 추출
  • .findAll(my_string)
    • 문자열 전체에서 모든 매칭 결과를 반환
    • 타입: Sequence<MatchResult>
  • .map { it.value.toInt() }
    • MatchResult에서 실제 매칭 문자열(value) 추출
    • 문자열 → 정수 변환
  • .sum()
    • 추출된 모든 정수 합산
val s = "a1b23c"
Regex("\\d+").findAll(s).map{ it.value.toInt() }.sum()  // 1 + 23 = 24

 

 

 

  • my_string.split("[A-z]+".toRegex())
    • [A-z]+ → 영문자가 연속된 부분
    • split() → 숫자와 문자로 나누어 리스트 생성
    • 예: "a1b23c" → ["", "1", "23", ""]
  • .filter(String::isNotEmpty)
    • 빈 문자열 제거
    • ["1", "23"]
  • .sumOf(String::toInt)
    • 각 문자열 → 정수 변환 후 합산
    • 1 + 23 = 24
  • split
    • 정의: 문자열을 구분자(delimiter)를 기준으로 나누어 여러 조각으로 만드는 함수
    • 결과 타입: List<String>
    • 사용법:
val result = "문자열".split(구분자)

 

 

  • 구분자:
    • 단일 문자 " "
    • 문자열 ", "
    • 정규식(Regex) "\\d+" 등
  • 옵션:
    • limit → 최대 몇 개로 나눌지 지정
    • 연속된 구분자는 빈 문자열 생성 가능 → .filter { it.isNotEmpty() }로 제거

예시 1: 기본 문자 구분

val s = "apple,banana,cherry"
val result = s.split(",")
println(result) // [apple, banana, cherry]

 

 

예시 2: 공백 기준

val s = "Hello world Kotlin"
val result = s.split(" ")
println(result) // [Hello, world, Kotlin]

 

예시 3: 정규식(Regex) 사용

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

 

예시 4: 연속된 구분자

val s = "apple,,banana,,,cherry"
val result = s.split(",")
println(result) // [apple, , banana, , , cherry]

 

  • 연속된 구분자는 빈 문자열 생성
  • 필요하면 filter로 제거:
val cleaned = s.split(",").filter { it.isNotEmpty() }
println(cleaned) // [apple, banana, cherry]

 

 

예시 5: limit 옵션

val s = "apple-orange-banana"
val result = s.split("-", limit = 2)
println(result) // [apple, orange-banana]

 

 

  • 문자열 → 여러 조각으로 나눠서 리스트 반환
  • 구분자 → 문자, 문자열, 정규식 가능
  • 연속된 구분자 → 빈 문자열 생성 가능
  • limit → 최대 분할 개수 지정 가능
  • 필요하면 .filter { it.isNotEmpty() }로 빈 문자열 제거

 

반응형