[프로그래머스] 문자열 여러 번 뒤집기

devel_liz·2024년 12월 12일
1

코딩테스트

목록 보기
22/45

🗒 문제



📝 나의 문제풀이

class Solution {
    fun solution(my_string: String, queries: Array<IntArray>): String {
        var result = my_string
        queries.forEachIndexed{ i, v->
            val change = result.substring(queries[i][0], queries[i][1] + 1).reversed()
            result = result.replaceRange(queries[i][0], queries[i][1] + 1, change)
        }
        return result
    }
}

📝 다른 사람의 문제 풀이

class Solution {
    fun solution(my_string: String, queries: Array<IntArray>): String {
        var answer = my_string
        queries.forEach { (s, e) ->
            answer = answer.slice(0 until s) + answer.slice(s..e)
                .reversed() + answer.slice(e+1..answer.lastIndex)
        }
        return answer
    }
}

🖊 문제 풀이 시 알면 좋을 것

  • forEach()

    • 정의: 컬렉션의 각 요소에 대해 반복 작업을 수행하는 함수입니다.
    • 사용법: 주어진 컬렉션의 모든 요소에 대해 지정된 작업을 실행합니다.
      val numbers = listOf(1, 2, 3)
      numbers.forEach { println(it) }
      // 출력: 1, 2, 3
  • slice()

    • 정의: 문자열이나 배열에서 지정된 범위의 요소들을 추출하는 함수입니다.
    • 사용법: slice(start..end) 또는 slice(start until end) 형태로 범위를 지정하여 부분을 추출합니다.
      val str = "Hello, World"
      println(str.slice(0..4)) // "Hello"
      println(str.slice(7..11)) // "World"
  • substring()

    • 정의: 문자열에서 특정 범위의 부분 문자열을 추출하는 함수입니다.
    • 사용법: substring(startIndex, endIndex) 형태로 범위를 지정하여 문자열을 추출합니다.
      • endIndex는 포함되지 않습니다.
      	val str = "Hello, World"
          println(str.substring(0, 5)) // "Hello"
  • replaceRange()

    • 정의: 문자열에서 지정된 범위의 문자를 다른 문자열로 교체하는 함수입니다.
    • 사용법: replaceRange(startIndex, endIndex, replacement) 형태로 범위와 교체할 문자열을 지정합니다.
      val str = "Hello, World"
      val newStr = str.replaceRange(7, 11, "Kotlin")
      println(newStr) // "Hello, Kotlin"
  • reversed()

    • 정의: 문자열을 뒤집은 새로운 문자열을 반환하는 함수입니다.
    • 사용법: reversed()를 사용하면 문자열이 뒤집힙니다.
      val str = "Hello"
      println(str.reversed()) // "olleH"

잠깐! substring()이랑 slice()랑 무슨 차이야?

  • 주요 차이점
특성substring()slice()
범위 포함 여부끝 인덱스 포함하지 않음끝 인덱스 포함
인덱스 지정 방식substring(startIndex, endIndex)slice(startIndex..endIndex) (또는 여러 인덱스 사용 가능)
범위 처리끝 인덱스가 시작 인덱스보다 작으면 두 인덱스를 교환하여 처리주어진 범위를 그대로 처리


어떤 함수가 더 적합했는지?

slice()가 더 적합하게 사용된 것 같다.
이유는 끝 인덱스를 포함하여 문자열을 추출하는 것이 substring()보다 더 직관적이다. substring()은 끝 인덱스를 포함하지 않기 때문에 +1을 추가해야 하는데, slice()는 인덱스를 정확하게 처리하기 때문에 별다른 조정 없이 범위 내의 모든 문자를 그대로 처리할 수 있기 때문이다.

profile
Android zizon

1개의 댓글

comment-user-thumbnail
2024년 12월 17일

ios랑 겹치는 메서드가 있는게 신기해요 ㅎㅎ

답글 달기

관련 채용 정보