본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] 글자 지우기

728x90

문제 힌트

첫 번째 접근 방법: 문자열 배열을 사용

  1. 문자열을 배열로 변환: my_string.split("")을 사용하여 문자열을 문자 배열로 변환합니다. 이렇게 하면 각 문자를 개별적으로 접근할 수 있습니다.
  2. 인덱스를 따라 빈 문자열로 교체: 주어진 indices 배열을 순회하며, 해당 인덱스에 위치한 문자를 빈 문자열로 교체합니다.
  3. 결과 문자열 생성: 문자 배열을 순회하며 빈 문자열이 아닌 문자를 이어 붙여 최종 결과 문자열을 생성합니다.

두 번째 접근 방법: StringBuilder와 정렬된 인덱스를 사용

  1. 인덱스 배열 정렬: 주어진 indices 배열을 정렬합니다. 이렇게 하면 문자열을 순회할 때 인덱스를 빠르게 찾을 수 있습니다.
  2. 문자열 순회 및 문자 추가: StringBuilder를 사용하여 문자열을 순회합니다. 현재 인덱스가 indices에 포함되어 있으면 해당 문자를 건너뛰고, 포함되지 않으면 StringBuilder에 문자를 추가합니다.
  3. 결과 문자열 반환: StringBuilder에 저장된 문자를 문자열로 변환하여 반환합니다.

 

 


정답은 더보기 클릭

더보기

split()을 하여 처리하기

class Solution {

    public String solution(String my_string, int[] indices) {
        StringBuilder sb = new StringBuilder();
        String[] arr = my_string.split("");

        // 주어진 인덱스 위치의 문자를 빈 문자열로 변경
        for (int i = 0; i < indices.length; i++) {
            arr[indices[i]] = "";
        }

        // 배열에서 빈 문자열이 아닌 문자를 결합하여 결과 문자열 생성
        for (String x : arr) {
            sb.append(x);
        }
        return sb.toString();
    }
}

 

배열을 정렬하여 인덱스로 처리하기

import java.util.*;

class Solution {
    public String solution(String my_string, int[] indices) {
        Arrays.sort(indices); // 인덱스 배열을 정렬
        
        StringBuilder sb = new StringBuilder();
        
        int index = 0;
        for (int i = 0; i < my_string.length(); i++) {
            if (index < indices.length && i == indices[index]) {
                // 현재 위치가 인덱스 배열에 포함되어 있으면 건너뜀
                index++;
            } else {
                // 그렇지 않으면 현재 문자를 StringBuilder에 추가
                sb.append(my_string.charAt(i));
            }
        }
        
        return sb.toString();
    }
}
728x90