본문 바로가기

코딩 테스트

프로그래머스 level1 - 없는 숫자 더하기(JS)

0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.


제한사항

  • 1 ≤ numbers의 길이 ≤ 9
    • 0 ≤ numbers의 모든 원소 ≤ 9
    • numbers의 모든 원소는 서로 다릅니다.

입출력 예

numbersresult

[1,2,3,4,6,7,8,0] 14
[5,8,4,0,6,7,9] 6

 

문제풀이

function solution(numbers) {
    var answer = 0;
    for(let i = 0; i < 10; i++) {
        if(!numbers.includes(i)) answer += i
    }
    return answer;
}

코드해석

for(let i = 0; i < 10; i++) {
	if(!numbers.include(i)) answer += i
}

 1. 반복문을 통해 i를 0부터 9까지 반복하면서 include를 사용하여 numbers배열의 요소에 포함되는지 판단 후 아닐 시에 answer에 값을 더한다.

모범답안

function solution(numbers) {
    return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}

 보자마자 머리를 쎄게 맞은 느낌이였다. 이런식으로 풀 수 있구나라는걸 느꼈다. 창의적이고 간결한 코드가 이런게 아닐까 생각이든다. 0부터 9까지 전체 합에서 numbers 배열의 합을 빼면 되는 문제였다..

 

* reduce()

arr.reduce(callback(accumulator, currentValue, index, array), initialValue)

arr

- 순회하고자 하는 배열

 

accumulator

- 누적되는 값

- callback 함수의 반환값을 누적

- initialValue를 설정한 경우 callback의 최초 호출시 initialValue로 값으로 초기화

- initialValue가 없을 경우 arr의 0번째 인덱스 값으로 초기화

 

currentValue

- 현재 배열의 요소

 

index(생략 가능)

- 현재 배열 요소의 index

 

array(생략 가능)

- reduce 함수를 호출한 배열

 

initialValue(생략 가능)

- callback의 최초 호출시 accumulator 초기값

 

출처: https://developer-talk.tistory.com/146 [평범한 직장인의 공부 정리:티스토리]