Skip to main content

18. [Java] 부분 문자열 이어 붙여 문자열 만들기

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

  • my_strings: 문자열 배열
  • parts: 각 문자열에서 자를 시작/끝 인덱스를 담은 이차원 배열 (parts[i] = [s, e])
  • 각 my_strings[i]에서 s부터 e까지 부분 문자열을 잘라서
  • 그것들을 순서대로 이어붙인 문자열을 반환

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

오답

class Solution {
    public String solution(String[] my_strings, int[][] parts) {
        StringBuilder sb = new StringBuilder();
        for (String str : my_string) {
            String sliced = str.substring(part[0], part[1]);
            sb.append(sliced);
        }
        return sb.toString();
    }
}

처음에는 for-each 문을 사용했는데 for-each는 배열의 값에는 접근 가능하지만,배열의 인덱스에는 접근하기 어렵다.
그래서 for문으로 바꿔서 해결했다.

정답코드

  1. ​StringBuilder 생성해서 문자열 누적 (이어붙이기 문제)
  2. 모든 문자열 배열 my_strings에 대해 반복문을 수행하면서, parts[i]에 지정된 시작-끝 인덱스를 기반으로 각 문자열에서 부분 문자열을 추출한다.
    • s = parts[i][0], e = parts[i][1]
    • substring(s, e + 1)을 통해 s부터 e까지 포함하는 문자열을 추출한다.
  3. 각 단계에서 잘라낸 문자열을 StringBuilder계속 덧붙이기
  4. 모든 부분 문자열을 누적한 후, 최종적으로 StringBuilder를 문자열로 변환하여 반환한다.
    • 즉, 모든 parts[i]에 해당하는 부분 문자열들을 순서대로 이어붙인 결과 문자열이 리턴된다.
class Solution {
    public String solution(String[] my_strings, int[][] parts) {
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < my_strings.length; i++) {
            int s = parts[i][0];
            int e = parts[i][1];
            sb.append(my_strings[i].substring(s, e + 1)); // e 포함이므로 +1
        }

        return sb.toString();
    }
}
substring(int beginIndex, int endIndex)

자바의 substring(s, e) 메서드는 시작 인덱스 s부터, e-1까지 슬라이싱한다.

문제에서 주어진 조건은 시작 인덱스 s부터, 끝 인덱스 e까지 포함해서 자르는 것이므로 아래 처럼 +1해야 e인덱스가 포함된다.

my_string.substring(s, e + 1)