자료구조

배열

귤먹는코더 2025. 2. 12. 18:15
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

'자료구조' 카테고리의 다른 글

해시(Hash)  (0) 2025.02.26
데큐(Deque)  (0) 2025.02.18
큐(Queue)  (0) 2025.02.17
스택(stack)  (0) 2025.02.15
리스트(List), 연결 리스트(Linked List)  (2) 2025.02.13