Post

배열의 원소 삭제하기

배열의 원소 삭제하기

문제 설명


초기 접근 및 로직 구상 방식

문제는 배열 2개(arr, delete_list)를 비교하여 delete_list의 원소들을 arr 배열에서 제거하여 출력하는 문제. ArrayList를 사용하여 각각 배열 2개를 나눠서 저장후, removeAll() 메소드 사용.

시도

1차 제출

  • 성공. 허나 코드 개선 사항에 대해서 물어봄.
초기 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.*;

class Solution {
    public int[] solution(int[] arr, int[] delete_list) {
        
        List<Integer> list = new ArrayList<>();
        List<Integer> dList = new ArrayList<>();
        
        for(int i : arr){
            list.add(i);
        }
        
        for(int i : delete_list){
            dList.add(i);
        }
        
        list.removeAll(dList);
        int[] answer = new int[list.size()];
        
        for (int i = 0; i < list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

힌트 1 “순서는 필요 없고 오직 포함 여부만 빠르게 확인하면 되는” 자료구조로 바꾸면 어떤 게 떠오르는거?

  • 바로 HashSet 떠오름. 위 방향대로 어차피 순서의 상관없는 delete_list를 HashSet으로 받기로 생각함.

2차 제출

  • 성공.

배운 점

  • 중복이 상관 없는가 하면 바로 HashSet이 떠오르지만, 막상 문제를 보면 떠오르지 않는다. ‘이 값이 이 안에 있냐 없냐만 따진다’ 로 생각하면 HashSet을 떠올리기 더 쉽다.
  • int[]를 바로 ArrayList로, Arrays.asList(arr) 처럼 받으면 int값이 들어갈거 같지만 List는 int, double 같은 기본형을 타입 인자로 받지 못해서, int[] 배열 자체가 원소 하나로 들어간 List<int[]>가 만들어진다. 함수를 Integer[]로 받거나 스트림을 사용하면 가능은 하지만, 지금 같은 문제에서는 이미 함수가 int로 선언되었기 때문에, 그대로 두는 것이 더 좋다.

최종 풀이 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.*;

class Solution {
    public int[] solution(int[] arr, int[] delete_list) {
        
        List<Integer> list = new ArrayList<>();
        Set<Integer> delete = new HashSet<>();
        
        for(int i : arr){
            list.add(i);
        }
        
        for(int i : delete_list){
            delete.add(i);
        }
        
        list.removeAll(delete);
        int[] answer = new int[list.size()];
        
        for (int i = 0; i < list.size(); i++){
            answer[i] = list.get(i);
        }
        
        return answer;
    }
}

This post is licensed under CC BY 4.0 by the author.