프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 부분 문자열 이어 붙여 문자열 만들기(Java)

Sigfriede 2023. 5. 18. 01:20

  문제 설명

  길이가 같은 문자열 배열 my_strings와 이차원 정수 배열 parts가 매개변수로 주어집니다. parts[i]는 [s, e] 형태로, my_strings[i]의 인덱스 s부터 인덱스 e까지의 부분 문자열을 의미합니다. 각 my_strings의 원소의 parts에 해당하는 부분 문자열을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

 

  제한사항

  • 1 <= my_strings의 길이 = parts의 길이 <= 100
  • 1 <= my_strings의 원소의 길이 <= 100
  • parts[i]를 [s, e]라 할 때, 다음을 만족합니다.
    • 0 <= s <= e < my_strings[i]의 길이

 

  입출력 예

my_strings parts result
["progressive", "hamburger", "hammer", "ahocorasick"] [[0, 4], [1, 2], [3, 5], [7, 7]] "programmers"
import java.lang.StringBuilder;
class Solution {
    public String solution(String[] my_strings, int[][] parts) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < my_strings.length; i++) {
            sb.append(my_strings[i].substring(parts[i][0], parts[i][1] + 1));
        }
        String answer = sb.toString();
        return answer;
    }
}

  StringBuilder를 생성합니다.

  for문이 my_strings의 길이만큼 순회합니다. my_strings의 길이와 parts의 길이는 동일합니다. append 메소드를 이용하여StringBuilder에 다음 조건을 만족하는 문자열을 추가합니다.

  my_strings의 i번째 원소인 문자열을 substring 메소드를 이용하여 부분 문자열을 만들 것입니다. substring 메소드의 인자에서 시작 지점은 parts[i][0]번째 인덱스부터 종료 지점은 parts[i][1] + 1번째 까지입니다. + 1을 하는 이유는 substring 메소드의 종료 지점에서 종료 지점으로 지정된 인덱스는 포함하지 않기 때문입니다. 이 문제에서는 포함하도록 되어 있으므로, + 1로써 종료 지점의 인덱스까지 포함하게 한 것입니다.

  앞선 과정으로 부분 문자열을 이어 붙인 문자열을 만들었습니다. answer에 반환하기 전 toString 메소드를 이용하여 sb를 변환합니다. 과정 없이 반환할 경우에는 sb에 있는 문자열 값이 출력되는 대신, 메모리에 저장된 주소를 반환합니다.