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문으로 바꿔서 해결했다.
정답코드
- StringBuilder 생성해서 문자열 누적 (이어붙이기 문제)
- 모든 문자열 배열
my_strings
에 대해 반복문을 수행하면서,parts[i]
에 지정된 시작-끝 인덱스를 기반으로 각 문자열에서 부분 문자열을 추출한다.s = parts[i][0]
,e = parts[i][1]
substring(s, e + 1)
을 통해 s부터 e까지 포함하는 문자열을 추출한다.
- 각 단계에서 잘라낸 문자열을
StringBuilder
에 계속 덧붙이기 - 모든 부분 문자열을 누적한 후, 최종적으로
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)