코딩/프로그래머스 코딩테스트

[프로그래머스] 없는 숫자 더하기

민쯔 2021. 9. 17. 12:00
728x90
반응형

안녕하세요. 민쯔입니다.😊

프로그래머스 코딩 테스트 연습문제 "없는 숫자 더하기"문제 해결방안에 대해 설명하겠습니다.

 

문제 설명

0부터 9까지의 숫자 중 일부가 들어있는 배열 numbers가 매개변수로 주어집니다. 

numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.

인데 저는 진짜... 문제 설명 그대로 풀었습니다....😂

function solution(numbers) {
    let number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    let noNum = number.filter(num => !numbers.includes(num));
    
    let answer = noNum.reduce((acc, cur) => acc + cur);
    return answer;
}

저는 number의 변수를 만들어 0~9까지 숫자를 배열로 담고

number배열에서 numbers의 배열에 있는 숫자를 없애서 numbers에 배열에 없는 숫자만을 number배열에 남긴 뒤

남은 숫자를 더하는 방향으로 구했습니다.

 

let number = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

  • 0~9까지 배열에 담음

 

let noNum = number.filter(num => !numbers.includes(num));

  • number배열에서(0~9) numbers배열에 없는 숫자를 추출해서 noNum변수에 담음
  • filter() : 주어진 함수의 테스트(괄호 부분)를 통과하는 모든 요소를 모아 새로운 배열로 반환
  • includes() : 배열이 특정 요소를 포함하고 있는지 판별
  • filter(), includes() 이 두 가지를 사용하여 number, numbers 배열에 대한 차집합을 구했습니다.
    • filter(), includes() 사용하면 두배 열에 교집합과 차집합을 구할 수 있습니다. (검색해서 알게 됐어요!)

 

filter(), includes()를 사용하여 교집합과 차집합을 구하는 예시

arr1 = [1,2,4,5,7];
    arr2 = [3,4,7,9];

    const test1 = arr1.filter(num => arr2.includes(num));
    const test2 = arr1.filter(num => !arr2.includes(num));
    const test3 = arr2.filter(num => !arr1.includes(num));

    console.log(test1); // 교집합 [4,7] -> C
    console.log(test2); // 차집합 [1,2,5] -> A
    console.log(test3); // 차집합 [3,9] -> B

 

let answer = noNum.reduce((acc, cur) => acc + cur);

  • reduce : 배열의 각 요소에 대해 주어진 함수를 실행하고, 하나의 결괏값을 반환
  • Array.reduce((acc, cur) => acc + cur , 기본값)
    • acc : 누산기 (누적된 값)
    • cur : 현재 값
    • 기본값 : 넣어도 되고 안 넣어도 됨(생략될 경우 0부터 시작)
  • noNum = [1, 2, 3] 이면
    • reduce((0, 1) => 0 + 1); // 1
    • reduce((1, 2) => 1 + 2); // 3
    • reduce((3, 3) => 3 + 3); // 6

 

여기까지 해결방안 설명이었습니다.

저는 이렇게 풀었는데 다른 사람 풀이 보니까 다들 "45 - number배열의 원소의 합" 이렇게 하더라고요....

제가 꼬아서 푸나 봐요😂 이렇게 또 하나 배워갑니다.

그래도 교집합, 차집합 사용방법을 알게 돼서 기분 좋습니다~

728x90
반응형