문제 설명
문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
제한사항
- 1 <= indices의 길이 < my_string의 길이 <= 100
- my_string은 영소문자로만 이루어져 있습니다
- 0 <= indices의 원소 < my_string의 길이
- indices의 원소는 모두 서로 다릅니다.
입출력 예
my_string | indices | result |
"apporoograpemmemprs" | [1, 16, 6, 15, 0, 10, 11, 3] | "programmers" |
import java.util.Arrays;
import java.lang.StringBuilder;
class Solution {
public String solution(String my_string, int[] indices) {
Arrays.sort(indices);
StringBuilder sb = new StringBuilder(my_string);
for (int i = indices.length - 1; i >= 0; i--) {
sb.deleteCharAt(indices[i]);
}
String answer = sb.toString();
return answer;
}
}
Arrays클래스의 sort 메소드를 이용하여 indices를 오름차순으로 정렬합니다.
StringBuilder를 생성하고 my_string을 인자로 넣어 문자열을 유동적으로 변경할 수 있도록 합니다.
for문이 indices의 길이에서 1을 뺀 값부터 0까지 i가 1씩 감소합니다. 문자열의 앞에서부터 삭제를 하면 인덱스가 변경되므로 for문이 예상한 것과 다른 방식으로 동작할 수 있습니다. 따라서 인덱스가 큰 값부터, 즉 문자열의 뒤에서부터 문자열을 삭제해나갈 것입니다.
deleteCharAt 메소드를 이용하여 StringBuilder에서 indices의 i번째 인덱스의 문자를 차차 제거합니다.
answer에 StringBuilder를 할당합니다. 이 값을 바로 반환하면 문자열이 아닌, 문자열이 있는 메모리 주소를 반환하므로 toString을 이용하여 올바른 문자열을 반환할 수 있도록 합니다.
'프로그래머스 > Lv. 0(코딩 기초 트레이닝)' 카테고리의 다른 글
[프로그래머스 코딩테스트] 문자 개수 세기(Java) (0) | 2023.05.28 |
---|---|
[프로그래머스 코딩테스트] 코드 처리하기(Java) (1) | 2023.05.28 |
[프로그래머스 코딩테스트] 세 개의 구분자(Java) (0) | 2023.05.27 |
[프로그래머스 코딩테스트] 배열의 길이를 2의 거듭제곱으로 만들기(Java) (0) | 2023.05.25 |
[프로그래머스 코딩테스트] 배열 만들기 4(Java) (0) | 2023.05.24 |