프로그래머스

function solution(numbers) {
var answer = 45
const length = numbers.length
for (let i = 0 ; i < length ; i++ ){
answer -= numbers[i]
}
return answer;
}
0부터 9까지의 수를 다 합치면 45이고 요소들의 값만큼 빼준다.
function solution(numbers) {
return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}
45는 나와 같은 방법으로 구하였지만 그때그때 빼는것이 아니라 다 더한 다음에 빼는것같다.
function solution(numbers) {
let answer = 0;
for(let i = 0; i <= 9; i++) {
if(!numbers.includes(i)) answer += i;
}
return answer;
}
반대로 i값이 numbers[i]에 속했는지 확인하고 더하는 방법이다.
아마도 2가 제일 느릴 것이다. 그렇게 생각한 이유는 조건이 더 복잡하기 때문이다.
특히 나와 1번 솔루션은 몇까지의 숫자가 범위인지 안다면 으로 연산하나를 미리 해둘 수 있다는 장점이 있다.
async function runSolutionWithTiming(solutionFn, number1, number2) {
const startTime = new Date();
for (let i = 0; i < 10000000; i++) {
await solutionFn(number1);
await solutionFn(number2);
}
const endTime = new Date();
const executionTime = endTime - startTime;
console.log(`${solutionFn.name} 실행 시간: ${executionTime}ms`);
}
async function main() {
const number1 = [0, 1, 2];
const number2 = [1, 9, 3, 5];
await runSolutionWithTiming(solution0, number1, number2);
await runSolutionWithTiming(solution1, number1, number2);
await runSolutionWithTiming(solution2, number1, number2);
위와같이 배열을 두개 만들어놨다.

예상대로 솔루션2가 제일 느리다.
이유를 예상해보자면
나의 솔루션 : answer와 i외의 값은 계산에 사용된 후에 없어진다.
솔루션 1 : 나와 발상은 비슷하지만 배열의 값을 계속 기억한다.
솔루션 2 : 그때그때 값을 부정연산자로 비교해서 오래걸린다.