728x90
배열이란?
- 배열은 같은 종류의 데이터를 연속된 메모리 공간에 저장하는 자료구조
- JavaScript에서 배열은 객체(Object)의 한종류로, 가변 길이를 가지며 다양한 자료형을 포함
배열의 특징
- 인덱스를 기반으로 접근 가능 (0부터 시작)
- 연속된 메모리 공간을 사용 (자바스크립트의 경우 내부적으로 다르게 동작할 수도 있음)
- 삽입/삭제 성능이 위치에 따라 다름(끝에서 하면 빠르고, 앞에서 하면 느림)
배열 선언 방법
// 기본 배열 선언
const arr1 = [1, 2, 3, 4, 5];
const arr2 = new Array(5).fill(0); // [0, 0, 0, 0, 0]
배열의 시간 복잡도

배열 메서드
🔹 탐색 및 조회
const arr = [10, 20, 30, 40, 50];
console.log(arr.indexOf(30)); // 2 (값이 있는 인덱스 반환)
console.log(arr.includes(20)); // true (값이 존재하는지 확인)
console.log(arr.find(x => x > 25)); // 30 (조건을 만족하는 첫 번째 값 반환)
console.log(arr.findIndex(x => x > 25)); // 2 (조건을 만족하는 첫 번째 인덱스 반환)
🔹 추가 및 삭제
const arr = [1, 2, 3, 4];
// 배열 끝에 추가/삭제
arr.push(5); // [1, 2, 3, 4, 5] (O(1))
arr.pop(); // [1, 2, 3, 4] (O(1))
// 배열 앞에 추가/삭제
arr.unshift(0); // [0, 1, 2, 3, 4] (O(n))
arr.shift(); // [1, 2, 3, 4] (O(n))
🔹 배열 순회 (반복문)
const arr = [10, 20, 30, 40];
// 기본 for문
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
// for...of
for (const num of arr) {
console.log(num);
}
// forEach (콜백 함수 사용)
arr.forEach(num => console.log(num));
🔹 배열 변형 및 정렬
const arr = [1, 2, 3, 4, 5];
// map: 각 요소를 변형
console.log(arr.map(x => x * 2)); // [2, 4, 6, 8, 10]
// filter: 조건에 맞는 요소만 반환
console.log(arr.filter(x => x % 2 === 0)); // [2, 4]
// reduce: 누적 연산 수행
console.log(arr.reduce((sum, x) => sum + x, 0)); // 15
// 정렬 (기본적으로 문자열 기준 정렬)
const numbers = [3, 1, 4, 1, 5, 9];
console.log(numbers.sort((a, b) => a - b)); // [1, 1, 3, 4, 5, 9]
// 뒤집기
console.log(arr.reverse()); // [5, 4, 3, 2, 1]
배열 관련 코딩 테스트 문제 패턴
🔹 특정 조건을 만족하는 요소 찾기
function countOccurrences(arr, target) {
return arr.filter(x => x === target).length;
}
console.log(countOccurrences([1, 2, 3, 2, 2, 4], 2)); // 3
🔹 배열 중복 제거
const arr = [1, 2, 2, 3, 4, 4, 5];
console.log([...new Set(arr)]); // [1, 2, 3, 4, 5]
🔹 배열 회전
function rotateArray(arr, k) {
k %= arr.length;
return [...arr.slice(-k), ...arr.slice(0, -k)];
}
console.log(rotateArray([1, 2, 3, 4, 5], 2)); // [4, 5, 1, 2, 3]
🔹 투포인터를 활용한 배열 문제
- 예제: 정렬된 배열에서 두 수의 합이 특정 값이 되는 쌍 찾기
function twoSum(arr, target) {
let left = 0, right = arr.length - 1;
while (left < right) {
const sum = arr[left] + arr[right];
if (sum === target) return [arr[left], arr[right]];
sum < target ? left++ : right--;
}
return [];
}
console.log(twoSum([1, 2, 3, 4, 6], 5)); // [1, 4]
배열의 시간 복잡도 정리
| 연산 | 매서드 | 평균 시간 복잡도 |
| 접근 | arr[i] | O(1) |
| 삽입 (끝) | push() | O(1) |
| 삽입 (앞) | unshift() | O(n) |
| 삭제 (끝) | pop() | O(1) |
| 삭제 (앞) | shift() | O(n) |
| 탐색 | indexOf(), includes() | O(n) |
| 정렬 | sort() | O(n log n) |
728x90