JAVASCRIPT/코딩테스트

프로그래머스 레벨1 - 없는 숫자 더하기(자바스크립트)

진짠 2023. 2. 10. 20:43
728x90

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

 

프로그래머스

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

programmers.co.kr

문제

0부터 9까지의 수 중에 일부가 배열로 저장되어 있고 그 배열에서 빠진 숫자를 찾는 문제이다.

 

일단 빠진 수를 찾으려면 배열을 순회해야만 한다.

 

for문을 사용할 수도 있지만 최근에 공부한 es6함수인 filter를 사용하여 좀 더 있어보이게(?) 코딩을 해야겠다는 생각을 했다.

 

제한사항

배열 n은 0부터 9 사이의 수이고 중복된 숫자는 들어가지 않는다.

 

한마디로 별다른 조건 줄 필요없이 편하게~ 반복문을 돌리면 된다는 소리다.

 

function solution(numbers) {
    var answer = 45; //0부터 9까지 모두 더한 변수 answer을 생성.
    numbers.filter(x => answer -= x); //answer에서 number에 있는 수들의 합을 뺀다.
    return answer;
}

filter함수는 배열의 각 값들 중에서 조건에 만족하는 값들만 뽑아오는 함수이다.

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

 

Array.prototype.filter() - JavaScript | MDN

filter() 메서드는 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환합니다.

developer.mozilla.org

number에 존재하는 숫자들을 answer에서 모두 빼주었다.

 

answer는 0부터 9까지 숫자를 모두 합한 값이기 때문에 number의 값을 모두 빼주면 결국 number에 없는 숫자들의 합이 된다.

 

비교

reduce함수를 사용해 더 간단하게도 코딩할 수 있다는 사실을 알았다.

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 

Array.prototype.reduce() - JavaScript | MDN

reduce() 메서드는 배열의 각 요소에 대해 주어진 리듀서 (reducer) 함수를 실행하고, 하나의 결과값을 반환합니다.

developer.mozilla.org

arr.reduce(callback, initialValue)

쉽게 말해 배열의 초기값과 콜백값을 받아서 조건을 줄 수 있는 함수다.

 

reduce의 가장 쉬운 이해 예시는 모든 배열의 합이다.

 

const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const sum1 = numbers.reduce((accumulator, currentNumber) => accumulator + currentNumber);

acc에는 콜백된 값이 넘어오고 current에는 최초 콜백함수 실행 시 적용되는 값이 들어간다. 빈 배열이거나 초기값이 없을 경우에는 에러가 발생한다.

 

위 배열의 경우 초기값이 1이기 때문에 current에 1이 들어간 채 콜백이 되며 배열의 순서대로 숫자를 더해가는 방식이다.

 

위 함수를 사용하면

45 - numbers.reduce((cur, acc) => cur + acc, 0);

이렇게 한줄로도 구현이 가능했다!

 

훨씬 직관적이고 깨끗하다.

 

그 외에 includes 함수를 사용하여 numbers 배열에 포함되지 않는 수를 더하는 조건을 줘도 됐다.

 

나는 뭔가 배운 filter을 사용하기 위해 억지로 쓰려고 한 것도 없지 않아 있는데 사실 다른 함수로도 얼마든지 구현이 가능하다는 것을 알았다.

 

총평

reduce, includes 복습. 

 

쉬운 코딩 문제도 쓰는 함수에 따라 보기도 깔끔하고 성능적으로도 훨씬 우수하게 코딩이 가능하다!

728x90