728x90

[문제 설명]

문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.

 

[입출력 예]

strArr result
["and","notad","abcd"] ["and","abcd"]
["there","are","no","a","ds"] ["there","are","no","a","ds"]

 

[차근 차근 생각해보기]

  1. 이름이 list인 리스트를 하나 선언해준다.
  2. strArr의 길이만큼 돌면서 만약 strArr[i] 번째에 'ad'라는 글자가 포함되지 않으면
  3. 처음에 선언 했던 list에 strArr[i]번째 요소를 추가해준다.
  4. [리스트명].toArray() 메서드로 list 리스트를 배열로 변환하여 return해준다.       

 

[코드]

<수정 전>

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
    public String[] solution(String[] strArr) {
        List<String> list = new ArrayList<>(Arrays.asList(strArr));

        for (int i = 0; i < strArr.length; i++) {
            if(!strArr[i].contains("ad")){
                list.remove(strArr[i]);
            }
        }

        String[] answer = list.toArray(new String[list.size()]);
        return answer;
    }
}

 

<수정 후>

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
    public String[] solution(String[] strArr) {
        List<String> list = new ArrayList<>();

        for (int i = 0; i < strArr.length; i++) {
            if(!strArr[i].contains("ad")){
                list.add(strArr[i]);
            }
        }

        String[] answer = list.toArray(new String[list.size()]);
        return answer;
    }
}

 

[반성할 점]

처음에 strArr의 배열은 list로 만들어 ad가 포함 된다면 빼주는 방법을 택했다. 하지만 계속 정답이 아니라고 하였고 며칠을 고민하다가 조언을 구하였다.

 

list의 길이가 5인 리스트에서 ad가 포함된 요소를 remove 하게 되면 list의 길이는 4가 되고 계속 줄어든 리스트의 길이까지 돌게 되기 때문에 문제가 생긴다고 하였다.

 

이야기를 듣고 고민해보았는데 그냥 삭제하기 보다는 list에 ad가 포함 되지 않는 것을 추가해주는 것이 더 간편하다고 생각했고 add 메서드를 사용해본 결과 문제가 잘 풀렸다..!

 

이제는 하나하나 동작을 어떻게 하는지 원리를 찾아보는 것도 필요하다..

아직 부족한 점이 많지만 차근차근 한걸음 나아가보아야겠다..!  

728x90

+ Recent posts