[개발] 코딩문제 정리

[프로그래머스] StringBuilder 사용 이유 / 글자 이어 붙여 문자열 만들기

  • -
반응형


글자 이어 붙여 문자열 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/181915


class Solution {
    public String solution(String my_string, int[] index_list) {
        String answer = "";
        
        for(int index : index_list){
            answer += my_string.charAt(index);
        }
        
        return answer;
    }
}


.charAt(a) : 문자열(String) 인덱싱




 

 

class Solution {
    public String solution(String my_string, int[] index_list) {

        StringBuilder sb = new StringBuilder();

        for (int idx : index_list)
            sb.append(my_string.charAt(idx));

        return sb.toString();
    }
}



.append(문자열) :  StringBuilder sb 뒤에 문자를 붙여줌

StringBuilder 사용 이유


1. 불변성 문제 해결:
String 객체는 불변(immutable)입니다. 즉, 문자열이 생성되면 변경할 수 없습니다. 따라서 문자열을 변경할 때마다 새로운 String 객체가 생성됩니다.
이로 인해 문자열을 반복적으로 연결하거나 수정하면 메모리와 성능에 큰 부담이 됩니다.

2. 성능 향상:
StringBuilder는 내부적으로 가변 배열을 사용하여 문자열을 관리합니다. 문자열을 변경해도 새로운 객체를 생성하지 않으므로 메모리 사용량이 줄어들고, 성능이 크게 향상됩니다.
특히, 문자열을 반복적으로 연결하는 작업에서 StringBuilder는 매우 효율적입니다.

3. 편리한 API:
StringBuilder는 문자열을 조작하는 다양한 메서드를 제공합니다. 문자열을 추가(append), 삽입(insert), 삭제(delete), 변경(replace)할 수 있는 메서드들이 있어 편리합니다.




 

 

import java.util.*;
import java.util.stream.Collectors;

class Solution {
    public String solution(String myString, int[] indexList) {
        return Arrays.stream(indexList).mapToObj(operand -> String.valueOf(myString.charAt(operand))).collect(Collectors.joining());
    }
}



이 코드는 주어진 indexList 배열에 있는 인덱스 값을 사용하여 myString의 각 문자에 접근하고, 이 문자를 결합하여 하나의 문자열로 반환하는 작업을 수행합니다. 코드는 Java의 스트림 API와 람다식을 사용하여 간결하고 효율적으로 작성되어 있습니다.

코드를 단계별로 설명하겠습니다:


단계별 설명

Arrays.stream(indexList):
indexList 배열을 스트림으로 변환합니다. 이 배열은 int 타입의 인덱스를 포함하고 있습니다.
스트림은 배열이나 컬렉션을 함수형 스타일로 처리할 수 있는 연속적인 데이터 요소입니다.

mapToObj(operand -> String.valueOf(myString.charAt(operand))):
mapToObj 메서드는 각 요소를 객체로 매핑하는 작업을 수행합니다. 여기서는 indexList의 각 인덱스 값을 해당 인덱스 위치의 myString 문자를 나타내는 문자열로 변환합니다.
operand는 indexList 배열의 각 요소(인덱스 값)를 의미합니다.
myString.charAt(operand)는 myString에서 해당 인덱스 위치의 문자를 가져옵니다.
String.valueOf(myString.charAt(operand))는 해당 문자를 문자열로 변환합니다. 이를 통해 각 인덱스에 해당하는 문자를 문자열로 변환한 스트림을 생성합니다.

collect(Collectors.joining()):
collect 메서드는 스트림의 요소들을 모아서 최종 결과를 생성합니다.
Collectors.joining()는 스트림의 모든 문자열 요소를 하나의 문자열로 결합합니다. 
기본적으로 아무 구분자 없이 연결합니다.

 

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.