문제
내가 작성한 정답
boolean
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] delete_list) {
ArrayList<Integer> answer1 = new ArrayList<>();
for(int i=0; i<arr.length; i++){
boolean del = false;
for(int j = 0; j<delete_list.length; j++){
if(arr[i] == delete_list[j]) {
del = true;
break;
}
}
if(!del) answer1.add(arr[i]);
}
int[] answer = new int[answer1.size()];
for(int i=0; i<answer.length; i++){
answer[i] = answer1.get(i);
}
return answer;
}
ArrayList - contains
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] delete_list){
ArrayList<Integer> del = new ArrayList<>();
for(int i : delete_list){
del.add(i);
}
ArrayList<Integer> answer = new ArrayList<>();
for(int i : arr){
if(!del.contains(i)){
answer.add(i);
}
}
return answer.stream().mapToInt(i->i).toArray();
}
}
Set - contains
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] delete_list){
Set<Integer> del = new HashSet<>();
for(int i:delete_list){
del.add(i);
}
ArrayList<Integer> answer = new ArrayList<>();
for(int i : arr){
if(!del.contains(i)) answer.add(i);
}
return answer.stream().mapToInt(i->i).toArray();
}
}
StreamAPI - ArrayList
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int[] delete_list) {
return Arrays.stream(arr)
.filter(i -> !Arrays.asList(Arrays.stream(delete_list).boxed().toArray()).contains(i))
.toArray();
}
}

StreamAPI - Set : ArrayList보다 성능이 살짝 더 좋음
import java.util.*;
import java.util.stream.*;
class Solution {
public int[] solution(int[] arr, int[] delete_list) {
return Arrays.stream(arr)
.filter(i-> !(Arrays.stream(delete_list).boxed().collect(Collectors.toSet()).contains(i)))
.toArray();
}
}

다른 사람들의 정답
StreamAPI - anyMatch
import java.util.stream.IntStream;
class Solution {
public int[] solution(int[] arr, int[] delete_list) {
return IntStream.of(arr).filter(i -> !IntStream.of(delete_list).anyMatch(s -> s == i)).toArray();
}
}
ArrayList - remove
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] delete_list) {
List<Integer> list = new ArrayList<>();
for(int n : arr) {
list.add(n);
}
for(int n: delete_list) {
list.remove((Integer)n);
}
int[] answer = new int[list.size()];
for(int i=0; i<list.size(); i++){
answer[i] = list.get(i);
}
return answer;
}
}
remove
Java에서 remove 메서드는 주로 컬렉션 클래스에서 요소를 제거하는 데 사용된다. 이 메서드는 여러 가지 클래스에서 오버로딩되어 있으며 사용되는 클래스에 따라 다양한 방식으로 작동한다.
- List - ArrayList, LinkedList, Vector 인덱스에 해당하는 요소 제거:
List<String> list = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
list.remove(1); // 인덱스 1의 요소("banana")를 제거
System.out.println(list); // 출력: [apple, cherry]
특정 객체 제거:
list.remove("apple"); // "apple" 요소를 제거
System.out.println(list); // 출력: [cherry]
- Set
- HashSet, TreeSet, LinkedHashSet
특정 객체 제거:
Set<String> set = new HashSet<>(Arrays.asList("apple", "banana", "cherry"));
set.remove("banana"); // "banana" 요소를 제거
System.out.println(set); // 출력: [apple, cherry]
- Map - HashMap, TreeMap, LinkedHashMap 키에 해당하는 엔트리 제거:
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.remove("banana"); // 키 "banana"에 해당하는 엔트리 제거
System.out.println(map); // 출력: {apple=1}
- Queue - LinkedList, PriorityQueue 특정 객체 제거:
Queue<String> queue = new LinkedList<>(Arrays.asList("apple", "banana", "cherry"));
queue.remove("banana"); // "banana" 요소를 제거
System.out.println(queue); // 출력: [apple, cherry]
- 기본형 배열 기본형 배열에서는 remove 메서드를 직접 사용할 수 없는 대신에 배열을 리스트로 변환한 후 remove를 사용할 수 있다.
int[] arr = {1, 2, 3, 4, 5};
List<Integer> list = new ArrayList<>();
for (int num : arr) {
list.add(num);
}
list.remove(Integer.valueOf(3)); // 값 3을 제거
System.out.println(list); // 출력: [1, 2, 4, 5]
List에서는 인덱스나 객체로 요소를 제거할 수 있고, Set에서는 특정 객체를 제거하며, Map에서는 키를 사용하여 엔트리를 제거한다.기본형 배열에서는 직접 사용할 수 없지만, 리스트로 변환하여 사용할 수 있다.
Share article