문제 설명
문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.
제한사항
- 1 ≤ strArr의 길이 ≤ 1,000
입출력 예
strArr | result |
["and","notad","abcd"] | ["and","abcd"] |
["there","are","no","a","ds"] | ["there","are","no","a","ds"] |
import java.util.ArrayList;
import java.util.Arrays;
class Solution {
public String[] solution(String[] strArr) {
ArrayList<String> arrlist = new ArrayList<String>(Arrays.asList(strArr));
arrlist.removeIf(str -> str.contains("ad"));
String[] answer = arrlist.toArray(new String[arrlist.size()]);
return answer;
}
}
로직 완성 후 gpt한테 하나 하나 물어가며 작성했다.
가장 추천이 많은 풀이는 이것이었는데
import java.util.*;
class Solution {
public String[] solution(String[] strArr) {
return Arrays.stream(strArr).filter(s -> !s.contains("ad")).toArray(String[]::new);
}
}
내 코드랑 비교해서 어떤 게 더 나은지(?) 궁금해서 gpt한테 물어봤다.
그랬더니 가독성, 간결성, 효율성 측면에서 두 번째 코드가 더 낫다고 말하더라.
세세한 퍼포먼스에서는 별 차이가 없어도 나는 이 답변을 통해 stream으로만 코테를 쳐도 되겠다는 강한 확신을 갖게 되었고
문제를 풀면서 앞으로는 오직 stream만 사용하고 stream API와 콜렉션에 대한 공부(정리)를 따로 해야겠다고 마음 먹었다.