
num_list에서 짝수의 개수와 홀수의 개수를 [짝수, 홀수] 배열 형태로 반환하는 함수
function solution(num_list) {
let answer = [];
let newArr = [];
for (let i = 0; i < num_list.length; i++) {
if (num_list[i] % 2 === 0) newArr.push(i);
}
return answer = [newArr.length, num_list.length - newArr.length];
}
(for + push) : 의도는 짝수의 개수를 세는 것이나 newArr.push(i)로 짝수의 값이 아닌 인덱스를 저장하고 있어서 개선이 필요함
짝수의 개수가 카운트라면 push() 자체가 불필요하므로 더 간단한 방식으로 개선 해야함
for 루프는 num_list 를 한 번 순회 -> O(n)
newArr.push()는 배열 끝에 요소를 추가 -> 평균 O(1)
newArr.length, num_list.length -> O(1)
👉 총 시간복잡도: O(n) : 상수 시간
newArr에 짝수 인덱스만 저장 -> 최악의 경우 모든 요소가 짝수라면 O(n) 공간 사용
👉 총 공간복잡도: O(n)
javascript
function solution(num_list) {
let even = 0;
for(let i = 0; i < num_list.length; i++){
if(num_list[i] % 2 === 0) even++
}
return [even, num_list.length - even]
javascript
function solution(num_list) {
let even = 0;
num_list.forEach((n)=> n % 2 ===0 && even++)
return [even, num_list.length - even]
}
🔍 해석
- even 짝수 카운터의 초기값을 0으로 표새하여 변수를 담을 그릇을 만든 다음,
- forEach로 num_list 배열을 하나씩 순회하며 n이 짝수일 경우 even++
- even = 짝수 개수이니, 전체 개수에서 뺴면 홀수 개수 = num_list.length -even
- [짝수, 홀수] 형태로 변환
javascript
function solution(num_list) {
let even = 0;
num_list.reduce(([even, odd], cur)=> cur % 2 === 0 ? [even +1, odd] : [even, odd + 1],[0, 0])
return [even, odd];
}
🔍 해석
- reduce() 는 누적값 [evne, odd]를 유지하면서 cur값을 하나씩 검사
- cur이 짝수 -> [even + 1, odd]
- cur이 홀수 -> [even, odd + 1]
- 초기 값은 [0, 0] (짝수 0개, 홀수 0개)
둘 다 시간복잡도 O(n) / 공간복잡도 O(1)로 효율은 같음