[Javascript] LV.1 없는 숫자 더하기

은비·2023년 10월 24일
1

Programmers_CodingTest

목록 보기
54/72
post-thumbnail

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

입출력 예 설명

입출력 예 #1

  • 5, 9가 numbers에 없으므로, 5 + 9 = 14를 return 해야 합니다.

입출력 예 #2

  • 1, 2, 3이 numbers에 없으므로, 1 + 2 + 3 = 6을 return 해야 합니다.

✍ SOLUTION1

const solution = (numbers) => 
 [1,2,3,4,5,6,7,8,9].filter(x => !numbers.includes(x)).reduce((a,b)=> a+b);

/*
내가 처음 작성한 코드이다.

filter, includes, reduce 세개를 사용하여 좋은코드는 아닌것 같다.(내 생각)
1~9 까지 원소로 가지고 있는 배열을 filter를 사용하여 1~9까지 포함하지 않는 요소를 가지고 reduce로
다 더해주어 return 해준다.
*

✍ SOLUTION2

const solution = (numbers) => {
    let num = 0;
    
    for(let i = 1; i < 10; i += 1) {
        if(!numbers.includes(i)) num += i
    }
    return num;
}

/* 
for문과 if를 사용하여 작성을 해보았다.
O(n^2)방식이라 좋은 코드는 아니지만 여러방식으로 풀어보고 싶어서 풀었다.

for문으로 1부터 9까지 1씩 증가하는 루프를 만들어준다.
if를 통해서 i가 numbers에 포함되어있는지 확인하고 아니라면 num에 i를 더해준다.
for문이 종료되면 num을 return 해준다.
*/

✍ SOLUTION3

const solution = (numbers) => 45 - numbers.reduce((acc, curr) => acc + curr);

/*
O(n) 방식으로 풀어본 코드이다.
실수가 없고 정수 1~9까지의 합을 더해준 값 45를 reduce를 통해 numbers의 요소의 값을 다 더해준 값의 
차를 구하여 return 해준다.
*/

✍ SOLUTION4

const solution = (numbers) => {
	let num = 0;

	for(let i = 0; i < numbers.length; i += 1) {
		num += numbers[i]
	}
	return 45 - num
}

// SOLUTION3이랑 비슷하지만 reduce를 사용하지않고 for문을 사용하여 작성해보았다.

출처 : 프로그래머스 스쿨 | 코딩테스트 연습

0개의 댓글