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

[프로그래머스 코딩테스트] 글자 지우기(Java)

Sigfriede 2023. 5. 27. 01:10

  문제 설명

  문자열 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을 이용하여 올바른 문자열을 반환할 수 있도록 합니다.