
내가 생각했을때 문제에서 원하는부분
정수 배열 arr과 delete_list가 있습니다.
arr의 원소 중 delete_list의 원소를 모두 삭제하고 남은 원소들은 기존의 arr에 있던 순서를 유지한 배열을 return 하는 solution 함수를 작성해 주세요.
내가 이 문제를 보고 생각해본 부분
solution 메서드
HashSet<Integer> deletes를 생성하여 삭제할 원소들을 빠르게 검색할 수 있도록 담는다.
delete_list 배열의 각 원소를 해시셋에 추가한다.
이것은 삭제 대상인 원소 목록이다.
ArrayList<Integer> resultList에 arr 배열의 모든 원소를 순회하며, 만약 그 원소가 deletes에 포함되어 있지 않으면 결과 리스트에 추가한다.
이렇게 하여 resultList는 삭제 대상이 제거된 원소들만 포함하게 된다.
마지막으로 resultList를 int 배열로 변환하여 반환한다.
printArray 메서드
매개변수로 받은 배열 arr의 모든 원소를 공백으로 구분하여 출력한다.
출력 후 줄바꿈을 한다.
main 메서드
문제의 예시 입력을 두 가지 준비한다.
첫 번째 예제는 arr1과 delete_list1이며, 이들을 solution 메서드에 넘겨 결과를 받아 printArray로 출력한다.
두 번째 예제 역시 arr2와 delete_list2를 사용하여 같은 방식으로 처리한다.
콘솔에는 각각 삭제 후 남은 배열 원소들이 순서대로 출력된다.
코드로 구현
import java.util.ArrayList;
import java.util.HashSet;
class Solution {
public int[] solution(int[] arr, int[] delete_list) {
HashSet<Integer> deletes = new HashSet<>();
for (int num : delete_list) {
deletes.add(num);
}
ArrayList<Integer> resultList = new ArrayList<>();
for (int num : arr) {
if (!deletes.contains(num)) {
resultList.add(num);
}
}
int[] answer = new int[resultList.size()];
for (int i = 0; i < resultList.size(); i++) {
answer[i] = resultList.get(i);
}
return answer;
}
}
프로그래머스 코드
package programmers.programmers2;
import java.util.ArrayList;
import java.util.HashSet;
// 프로그래머스 배열의 원소 삭제하기
public class Main101 {
public static int[] solution(int[] arr, int[] delete_list) {
HashSet<Integer> deletes = new HashSet<>();
for (int num : delete_list) {
deletes.add(num);
}
ArrayList<Integer> resultList = new ArrayList<>();
for (int num : arr) {
if (!deletes.contains(num)) {
resultList.add(num);
}
}
int[] answer = new int[resultList.size()];
for (int i = 0; i < resultList.size(); i++) {
answer[i] = resultList.get(i);
}
return answer;
}
public static void printArray(int[] arr) {
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
public static void main(String[] args) {
// 첫 번째 예제
int[] arr1 = {293, 1000, 395, 678, 94};
int[] delete_list1 = {94, 777, 104, 1000, 1, 12};
int[] result1 = solution(arr1, delete_list1);
printArray(result1); // 기대 출력: 293 395 678
// 두 번째 예제
int[] arr2 = {110, 66, 439, 785, 1};
int[] delete_list2 = {377, 823, 119, 43};
int[] result2 = solution(arr2, delete_list2);
printArray(result2); // 기대 출력: 110 66 439 785 1
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.