
내가 생각했을때 문제에서 원하는부분
문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
내가 이 문제를 보고 생각해본 부분
solution 메서드는 my_string과 삭제해야 할 인덱스 배열 indices를 매개변수로 받는다.
먼저 삭제할 인덱스들을 저장하기 위해 HashSet<Integer> 타입의 removeSet을 생성한다.
반복문을 사용해서 indices 배열 내부의 모든 인덱스 값을 removeSet에 넣는다. 이렇게 하면 삭제 대상 인덱스를 빠르게 확인할 수 있다.
빈 StringBuilder answer를 만들어서 결과 문자열을 저장할 준비를 한다.
my_string의 각 문자 위치 i를 순회하면서, 만약 removeSet에 현재 인덱스가 포함되어 있지 않으면 그 문자를 answer에 추가한다. 포함되어 있으면 해당 문자를 건너뛴다.
모든 문자를 확인한 후 answer에 모아진 문자열을 toString()으로 변환하여 반환한다.
코드로 구현
import java.util.HashSet;
import java.util.Set;
class Solution {
public String solution(String my_string, int[] indices) {
Set<Integer> removeSet = new HashSet<>();
for (int idx : indices) {
removeSet.add(idx);
}
StringBuilder answer = new StringBuilder();
for (int i = 0; i < my_string.length(); i++) {
if (!removeSet.contains(i)) {
answer.append(my_string.charAt(i));
}
}
return answer.toString();
}
}
프로그래머스 코드
package programmers;
import java.util.HashSet;
import java.util.Set;
// 프로그래머스 글자 지우기
public class Main45 {
public static void main(String[] args) {
Main45 sol = new Main45();
String my_string = "apporoograpemmemprs";
int[] indices = {1, 16, 6, 15, 0, 10, 11, 3};
String result = sol.solution(my_string, indices);
System.out.println(result); // 출력: programmers
}
public String solution(String my_string, int[] indices) {
Set<Integer> removeSet = new HashSet<>();
for (int idx : indices) {
removeSet.add(idx);
}
StringBuilder answer = new StringBuilder();
for (int i = 0; i < my_string.length(); i++) {
if (!removeSet.contains(i)) {
answer.append(my_string.charAt(i));
}
}
return answer.toString();
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.