JavaScript에서 불필요한 루프 반복 최적화
다음 코드에서 어떤 프로그래머가 배열에 숫자 3이 있는지 확인하고 있습니다:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let exists = false;
for (let elem of arr) {
if (elem === 3) {
exists = true;
}
}
console.log(exists);
이 해결책에 무엇이 문제일까요? 루프 안에서 불필요한 연산이 수행되지 않는 것처럼 보입니다.
그러나 문제는 숫자 3이 배열에 있다는 것이 확인된 후에도
루프가 여전히 배열의 끝까지 계속 돌아간다는 점입니다.
가장 비효율적인 경우는 숫자 3이
배열의 어딘가 처음 부분에서 발견되고, 배열 자체의 길이가
예를 들어 1000개의 요소일 때입니다.
이 경우 천 번의 쓸모없는 루프 반복이 발생합니다! 최적이 아닙니다.
루프를 적절히 중지하여 코드를 최적화해 보겠습니다:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let exists = false;
for (let elem of arr) {
if (elem === 3) {
exists = true;
break;
}
}
console.log(exists);
다음 코드는 배열의 요소를 몇 개 더해야 합계가 10을 초과하는지 계산합니다.
최적화를 수행하세요:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let sum = 0;
let i = 1;
for (let elem of arr) {
sum += elem;
if (sum <= 10) {
i++;
}
}
console.log(i);
다음 코드는 주어진 범위에서 짝수를 출력합니다. 최적화를 수행하세요:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0) {
console.log(i);
}
}
다음 코드는 2와 3으로 동시에 나누어 떨어지는 숫자를 출력합니다.
최적화를 수행하세요:
for (let i = 0; i <= 100; i++) {
if (i % 2 === 0 && i % 3 === 0) {
console.log(i);
}
}
다음 코드는 올해의 모든 13일의 금요일을 찾습니다. 최적화를 수행하세요:
for (let i = 0; i <= 11; i++) {
let curr = new Date;
let last = new Date(curr.getFullYear(), i + 1, 0).getDate();
for (let j = 1; j <= last; j++) {
let date = new Date(curr.getFullYear(), i, j);
if (date.getDate() === 13 && date.getDay() === 5) {
console.log(date);
}
}
}