개발자는 기록이 답이다

[프로그래머스][Java][Lv.0] 배열의 원소 삭제하기 본문

알고리즘/프로그래머스

[프로그래머스][Java][Lv.0] 배열의 원소 삭제하기

slow-walker 2023. 10. 24. 09:32

 

https://school.programmers.co.kr/learn/courses/30/lessons/181844

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

최근에 자바를 한국어하는 만큼 당연하게 잘 쓸 수 있어야 된다고 해서 레벨 0을 하루에 10개 정도 씩 풀려고 하고 있다.

레벨 0를 풀다보면 괜찮은 함수를 발견하게 되서 뜻밖에 수익이 있어서 감사하다.

 

 

첫번째 풀이

import java.util.*;
class Solution {
public int[] solution(int[] arr, int[] delete_list) {
        List<Integer> list = new ArrayList<>();
        for (int num : arr) {
            list.add(num);
        }

        for (int num : delete_list) {
            list.remove((Integer)num); // Integer로 형변환!
        }
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

list.remove() 메서드는 int 값을 받을 때 그 값을 리스트에서 제거하는 것이 아니라, 그 값의 인덱스를 제거하려고 시도합니다.

intInteger로 형변환하여 리스트에서 해당 Integer 객체를 제거합니다. 이렇게 하면 int 값 자체가 아니라 Integer 객체를 삭제하므로 원하는 동작이 발생하게 됩니다.

ArrayList.remove()

public E remove​(int index)
public boolean remove​(Object o)

테스트 1 통과 (2.71ms, 74.6MB)
테스트 2 통과 (2.08ms, 77.5MB)
테스트 3 통과 (2.91ms, 78.4MB)
테스트 4 통과 (3.05ms, 72.1MB)
테스트 5 통과 (2.37ms, 79.3MB)
테스트 6 통과 (2.17ms, 78.8MB)
테스트 7 통과 (2.35ms, 77.9MB)
테스트 8 통과 (4.26ms, 74.8MB)
테스트 9 통과 (2.55ms, 74.2MB)
테스트 10 통과 (3.36ms, 74.8MB)
테스트 11 통과 (6.42ms, 78.1MB)
테스트 12 통과 (2.14ms, 75.7MB)
테스트 13 통과 (1.85ms, 74.6MB)

 

두번째 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int[] delete_list) {
        List<Integer> list = new ArrayList<>();
        for (int num : arr) {
            list.add(num);
        }

        List<Integer> deleteList = new ArrayList<>();
        for (int num : delete_list) {
            deleteList.add(num);
        }

        list.removeIf(deleteList::contains); 위 아래 똑같이 동작 : Predicate로 조건을 건것임
//        list.removeIf(element -> element == num); 

        return list.stream().mapToInt(Integer::intValue).toArray();
    }
}

removeIf 메서드는 Java의 컬렉션에서 제공하는 메서드 중 하나로, Predicate를 이용하여 컬렉션의 요소를 조건에 따라 삭제하는데 사용됩니다.  stream에 있는 filter랑 같은 원리이다. Predicate는 조건을 검사하는 함수를 나타내는 함수형 인터페이스로, removeIf 메서드는 이 Predicate를 사용하여 조건을 만족하는 요소를 삭제합니다.

 

테스트 1 통과 (2.16ms, 75.8MB)
테스트 2 통과 (2.35ms, 66.9MB)
테스트 3 통과 (2.22ms, 73.5MB)
테스트 4 통과 (2.29ms, 71.7MB)
테스트 5 통과 (2.97ms, 84.8MB)
테스트 6 통과 (2.30ms, 71.7MB)
테스트 7 통과 (3.50ms, 82.3MB)
테스트 8 통과 (2.38ms, 72.2MB)
테스트 9 통과 (2.25ms, 72.4MB)
테스트 10 통과 (2.49ms, 75.5MB)
테스트 11 통과 (2.29ms, 75.7MB)
테스트 12 통과 (2.21ms, 75.2MB)
테스트 13 통과 (2.30ms, 84.2MB)

 

참고 링크 :

how to remove an Integer item in an ArrayList

 

Java, how to remove an Integer item in an ArrayList

Suppose I have such an ArrayList: ArrayList<Integer> list = new ArrayList<Integer>(); After the adding operation: list.add(2); list.add(3); list.add(5); list.add(7); I want to remove

stackoverflow.com

[Java] ArrayList에서 특정 값 삭제하기

 

[Java] ArrayList에서 특정 값 삭제하기

ArrayList에서 특정값을 삭제하는 방법을 소개합니다. ArrayList.remove() ArrayList.removeAll() Iterator.remove() 1. ArrayList.remove() public E remove​(int index) public boolean remove​(Object o) ArrayList의 remove() 메소드를 사용

hianna.tistory.com