글자 지우기

nacSeo (낙서)·2024년 2월 3일
0

프로그래머스

목록 보기
54/169

문제 설명

문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

제한 사항

1 ≤ indices의 길이 < my_string의 길이 ≤ 100
my_string은 영소문자로만 이루어져 있습니다
0 ≤ indices의 원소 < my_string의 길이
indices의 원소는 모두 서로 다릅니다.

나의 코드

import java.util.*;

class Solution {
    public String solution(String my_string, int[] indices) {
        StringBuilder answer = new StringBuilder(my_string);
        Arrays.sort(indices);
        int offset = 0;
        for(int i = 0; i < indices.length; i++) {
            int index = indices[i] - offset;
            answer.deleteCharAt(index);
            offset++;
        }
        return answer.toString();
    }
}
  • Arrays.sort(indices) 메서드를 사용해 인덱스 배열을 정렬하여 오름차순으로 순회하도록 함
  • int값 offset을 선언하면서 이전 삭제로 인한 인덱스의 이동량을 담아줌
  • 반복문을 돌면서 이전 삭제로 인해 현재 인덱스에 영향을 받으므로 int값 index에 원래 인덱스에 offset을 뺀 값을 담아서 계산해줌
  • 마지막으로 삭제로 인해 이후 인덱스가 1씩 앞으로 당겨지므로 offset을 증가시킴

다른 사람 코드

class Solution {

    public String solution(String my_string, int[] indices) {
        String answer = "";
        String[] tmp = my_string.split("");

        for (int i = 0; i < indices.length; i++) {
            tmp[indices[i]] = "";
        }

        for (String x : tmp) {
            answer += x;
        }
        return answer;
    }
}

느낀 점

단순하게 생각하고 달려들었다가 index 길이 초과 오류가 발생했다. 반복문을 돌면서 문자가 삭제됨에 따라 인덱스의 값이 변경되기 때문에 발생한 것으로 판단되어 따로 그 차이를 담아주는 int 변수를 선언하여 계산했다. 생각보다 많이 까다로웠던 문제

profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글