프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 배열의 원소 삭제하기(Java)

Sigfriede 2023. 5. 12. 01:00

  문제 설명

  정수 배열 arr과 delete_list가 있습니다. arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return하는 solution 함수를 작성해 주세요.

 

  제한사항

  • 1 <= arr의 길이 <= 100
  • 1 <= arr의 원소 <= 1,000
  • arr의 원소는 모두 서로 다릅니다.
  • 1 <= delete_list의 길이 <= 100
  • 1 <= delete_list의 원소 <= 1,000
  • delete_list의 원소는 모두 서로 다릅니다.

 

  입출력 예

arr delete_list result
[293, 1000, 395, 678, 94] [94, 777, 104, 1000, 1, 12] [293, 395, 678]
[110, 66, 439, 785, 1] [377, 823, 119, 43] [110, 66, 439, 785, 1]
class Solution {
    public int[] solution(int[] arr, int[] delete_list) {
        boolean[] bool = new boolean[arr.length];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < delete_list.length; j++) {
                if (arr[i] == delete_list[j]) {
                    bool[i] = true;
                }
            }
        }
        int count = 0;
        for (int i = 0; i < bool.length; i++) {
            if (!bool[i]) {
                count++;
            }
        }
        int[] answer = new int[count];
        int index = 0;
        for (int i = 0; i < bool.length; i++) {
            if (!bool[i]) {
                answer[index++] = arr[i];
            }
        }
        return answer;
    }
}

  boolean 배열을 생성합니다. 크기는 arr의 길이와 동일합니다. arr의 배열의 원소와 delete_list의 원소와 동일한지 비교하여 true와 false를 반환할 것입니다.

  바깥 for문이 arr의 길이만큼 순회합니다. 안쪽 for문이 delete_list의 길이만큼 순회합니다. 만약 arr의 i번째 원소와 delete_list의 j번째 원소가 동일하다면, bool의 i번째 원소를 true로 할당합니다. bool 배열의 원소가 true인 인덱스는 삭제해야 할 인덱스인 것입니다.

  count 변수를 생성합니다. 이는 answer 배열의 크기를 지정할 것입니다. for문이 bool의 길이만큼 순회합니다. 만약 bool의 i번째 원소가 false라면, count가 증가합니다.

  answer 배열을 생성합니다. 크기는 앞서 구한 count로 지정합니다. index 변수를 생성합니다. 이는 answer의 인덱스를 지정할 변수입니다. for문이 bool의 길이만큼 순회합니다. 만약 bool의 i번째 인덱스가 false라면, 즉 arr의 원소가 delete_list의 원소와 겹치지 않는다면 answer의 index번째에 arr의 i번째 원소를 할당합니다.