본문 바로가기
코딩테스트

[프로그래머스] 인덱스 바꾸기

by liz_devel 2025. 12. 21.

🗒 문제

 


📝 나의 문제풀이

class Solution {
    fun solution(my_string: String, num1: Int, num2: Int): String {
        val chars = my_string.toCharArray()
        val current = chars[num1]
        chars[num1] = chars[num2]
        chars[num2] = current
        return chars.joinToString("")
    }
}

📝 다른 사람의 문제 풀이

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

import java.util.*

class Solution {
    fun solution(myString: String, num1: Int, num2: Int): String {
        return myString.toList().let {
            Collections.swap(it, num1, num2)
            it.joinToString("")
        }
    }
}

🖊 문제 풀이 시 알면 좋을 것

 

Collections.swap

리스트에서 두 인덱스의 값을 서로 바꿔주는 함수

 

왜 쓰나?

  • 직접 임시 변수를 만들지 않고
  • 리스트 요소 교환을 한 줄로 처리하고 싶을 때
import java.util.Collections

val list = mutableListOf('a', 'b', 'c')

Collections.swap(list, 0, 2)

println(list) // [c, b, a]

 


 

concatToString()

CharArray를 바로 String으로 바꿔주는 함수

val chars = charArrayOf('a', 'b', 'c')

val result = chars.concatToString()

println(result) // "abc"

 

 


joinToString("")이랑 뭐가 달라?

항목 concatToString joinToString("")
대상 CharArray 전용 모든 컬렉션
중간 객체 없음 있음
의도 문자 배열 → 문자열 요소들을 이어붙임
가독성 👍 명확 보통

 

*표에서 말하는 중간 객체는 StringBuilder를 뜻함

 

중간 객체 비교에 대해 더 자세히 설명하자면

joinToString("") — 중간 객체 있음

val chars = charArrayOf('a', 'b', 'c')
val result = chars.joinToString("")

내부에서 벌어지는 일 (개념)

  1. 각 Char를 하나씩 꺼냄
  2. Char → String으로 변환
  3. StringBuilder 생성 ← 중간 객체
  4. 문자열을 하나씩 append
  5. 최종 String 생성

👉 StringBuilder가 중간 객체

 

concatToString() — 중간 객체 없음

val chars = charArrayOf('a', 'b', 'c')
val result = chars.concatToString()

내부에서 벌어지는 일 (개념)

  1. CharArray 길이만큼 한 번에
  2. 바로 String 생성

👉 과정용 객체를 만들지 않음

 

내부적으로는 뭐가 다른데?

  • concatToString() → CharArray 전용 최적화
  • joinToString("") → 제네릭 처리 → 약간 더 무거움

StringBuilder란?

문자열을 계속 이어 붙일 수 있는, 가변(mutable) 문자열 객체

 

val sb = StringBuilder()
sb.append("a")
sb.append("b")
sb.append("c")

val result = sb.toString()

 

  • StringBuilder = 가변 문자열 컨테이너
  • String은 불변 → 붙일수록 새 객체 생성
  • StringBuilder는 하나의 객체로 계속 append
  • joinToString 같은 함수 내부에서 자동으로 사용됨
  • CharArray → String 변환에는
    👉 concatToString()이 더 직접적

 

반응형