문제설명
정수 배열 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의 원소는 모두 서로 다릅니다.
입출력 예
입출력 예 설명
입출력 예 #1
- 예제 1번의 arr의 원소 중 1000과 94가 delete_list에 있으므로 이 두 원소를 삭제한 [293, 395, 678]을 return 합니다.
입출력 예 #2
- 예제 2번의 arr의 원소 중 delete_list에 있는 원소는 없습니다. 따라서 arr 그대로인 [110, 66, 439, 785, 1]을 return 합니다.
코드 설명
function solution(arr, delete_list)
: arr과 delete_list 두 개의 인자를 받는 함수를 정의합니다.
var answer = [];
: 결과를 저장할 빈 배열 answer를 선언합니다.
for(let i = 0; i < arr.length; i++)
: for반복문을 이용하여 arr 배열의 각 원소를 하나씩 순회합니다.
let index = delete_list.indexOf(arr[i]);
: 현재 순회 중인 arr의 원소 arr[i]가 delete_list에 있는지를 확인하기 위해 indexOf 함수를 사용하여 해당 원소의 인덱스를 찾습니다. 만약 delete_list에 해당 원소가 없으면 index는 -1이 됩니다.
if(index === -1)
: 만약 delete_list에 현재 순회 중인 원소가 없다면 (인덱스가 -1이라면) 아래의 내용을 실행합니다.
answer.push(arr[i]);
: delete_list에 해당 원소가 없으면, 현재 순회 중인 원소를 answer 배열에 추가합니다.
return answer;
: 그 후, 최종적으로 answer 배열을 반환합니다.
소스코드&결과
소스코드
function solution(arr, delete_list) {
var answer = [];
for(let i = 0; i < arr.length; i++){
let index = delete_list.indexOf(arr[i]);
if(index === -1) answer.push(arr[i]);
}
return answer;
}
실행결과
다른 사람이 짠 코드
const solution = (arr, dels) => arr.filter((el) => !dels.includes(el));
위의 코드는 정말 간결하네요! 한 번 코드를 분석해보도록 하겠습니다.
const solution = (arr, dels) =>
: solution이라는 이름의 화살표 함수를 정의합니다. 이 함수는 arr과 dels라는 두 개의 매개변수를 받습니다.
arr.filter((el) => !dels.includes(el))
: 입력 배열 arr을 순회하면서 filter 메서드를 사용하여 조건을 만족하는 원소들만 남겨둡니다.
(el) => !dels.includes(el)
: 이 부분은 화살표 함수로, 배열 dels에 현재 원소 el가 포함되어 있지 않은 경우를 체크합니다. dels에 포함된 원소들은 제외됩니다.
'Coding Test > 프로그래머스' 카테고리의 다른 글
[Java, JavaScript] 나누어 떨어지는 숫자 배열 (0) | 2023.08.21 |
---|---|
[JavaScript] 배열 만들기 3 (0) | 2023.08.15 |
[JavaScript] 순서 바꾸기 (2) | 2023.08.11 |
[JAVA] JadenCase 문자열 만들기 (6) | 2023.08.04 |
[JAVA] 로또의 최고 순위와 최저 순위 (2) | 2023.08.02 |