문자열 my_string과 정수 배열 indices가 주어질 때, my_string에서 indices의 원소에 해당하는 인덱스의 글자를 지우고 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.
처음 접근했을 때는, 이중 for문을 활용해 my_string의 인덱스와 indices 배열에 있는 값이 같으면 그 인덱스에 해당하는 my_string의 문자를 변수에 누적하면 된다고 생각했다.
실행한 결괏값 "apoopemp"이 기댓값 "programmers"과 다릅니다.
택도 없었다. 아포펨프... 뭔데... 그래서 갈아 엎었다.
class Solution {
public String solution(String my_string, int[] indices) {
String answer = "";
for(int i=0;i<my_string.length();i++){
for(int j=0;j<indices.length;j++){
if(i == indices[j]) answer += my_string.charAt(i);
}
}
return answer;
}
}
split()이 전달된 인자를 기준으로 문자열을 나눈 다음 배열 형태로 반환하니까 그 특성을 이용하기로 했다. 그 다음 반환 받은 배열 String[] strArr 배열 중 int[] indices의 값과 일치하는 인덱스가 있다면 그 값을 "" 빈 문자열로 만들었다.
그렇게 구멍이 숭숭 뚫린(?) 문자열 배열 strArr을 루프를 돌며 빈 문자열이 아닐 때만 변수 String answer에 누적해 주었다. 문제를 풀고 나서 다른 분들의 답을 보다가 이 과정을 생략할 수 있는 좋은 코드를 발견해 기록해 둔다.
String.join() 사용해 문자열 연결하기 (출처)
아래와 같이 배열 혹은 Array에 구분된 채로 담겨 있는 문자들 사이사이에 추가할 문자를 넣은 다음 하나의 문자열로 합쳐 반환한다.
join("추가할 문자", "대상 list")
join("추가할 문자", "대상 Array")
→return String.join("", strArr);
class Solution {
public String solution(String my_string, int[] indices) {
String[] strArr = my_string.split("");
for(int idx : indices){
strArr[idx] = "";
}
String answer = "";
for(int i=0;i<strArr.length;i++){
if(!"".equals(strArr[i])) answer += strArr[i];
}
return answer;
}
}
