본문 바로가기

programming study/Computer Science

자료구조와 알고리즘 - 배열

본 내용은 프로그래머스의 코딩테스트 광탈 방지 A to Z : JavaScript 강의를 토대로 작성하였습니다.

1. 배열이란?

  • 순차 리스트라고도 불림
  • 연관된 데이터를 연속적인 형태로 구성
  • 배열의 원소는 순서 대로 번호(index)가 붙음

2. 배열의 특징

  • 고정된 크기를 가짐
    • 보통은, 동적으로 크기를 늘릴 수 없음
    • 반면, JS와 같은 스크립트 언어는 동적으로 크기가 증감
  • index를 사용하여 해당 index에 해당하는 원소에 접근할 수 있음
    • 상수시간이 걸림(O(1))
  • 원소를 삭제하면, 해당 index의 자리는 비게 됨
    • 빈 자리를 채우기 위해서 뒤의 요소들 하나하나를 순차적으로 앞으로 당겨 채우게 됨
    • 삭제 후 순서를 맞추려면 O(n)이 소요됨
    • 배열의 요소를 추가하는 경우도 이와 같아, O(n)이 소요 됨
  • 추가삭제가 반복되는 로직이면 배열을 사용하지 말 것!
  • 탐색이 많을 때 유리

3. JavsScript에서의 배열

  • JavaScript 배열은 동적임
    • 동적으로 크기를 늘릴 수 있음
  • Hash Map에 가까움
    • index가 number가 아니어도 됨
    • 숫자, 문자, 논리값이 들어갈 수 있음
  • length가 내부적으로 관리 됨
  • 배열은 객체와 동일
    • typeof 연산자의 결과가 object
    • 특수한 객체 취급
    • 객체처럼 key-value의 형태로 item을 넣을 수 있음(length 는 변화하지 않음)

생성 방법

// 1. 배열 리터럴
const exampleArray1 = [];
​
// 2. 배열 생성자 함수 사용(new 키워드는 생략 가능)
// 생성 시, 전달한 number만큼의 length를 가지는 배열이 생성됨
// fill: 배열의 모든 요소에 정적인 값을 채우는 배열 프로토타입 메서드
const exampleArray2 = Array(10).fill(0);
​
// 3. 로직을 사용하여 배열 생성
// from: 유사 배열 객체나 반복 가능한 객체를 얕게 복사해 새로운 배열을 만드는 정적 메서드
const exampleArray3 = Array.from({length: 10}, (_, i) => i);

배열 요소 추가, 삭제

const exampleArray = [1, 2, 3];
​
// 1. 배열의 끝에 요소 추가(O(1))
exampleArray.push(4);
​
// 2. 특정 인덱스에 요소 추가(O(n))
// splice: 특정 인덱스에 요소를 추가, 삭제하는 메서드
// 선형 시간을 가짐
exampleArray.splice(4, 0, 5);
​
// 3. 특정 인덱스 요소 제거(O(n))
exampleArray.splice(4, 1);
​
// 4. 끝 요소 제거
exampleArray.pop();
​
// 5. 첫 요소 추가
exampleArray.unshift(1);
​
// 6. 첫 요소 제거
exampleArray.shift();

기타 메서드

// 1. 배열을 문자열로 변환
const exampleStirng =[1, 2, 3, 4, 5].join(",");
​
// 2. 배열을 거꾸로 하기(원본 배열을 변형)
const exampleArray = [1, 2, 3, 4, 5];
exampleArray.reverse();
​
// 3. 두 배열 합치기
const mergeArray1 = [1, 2, 3];
const mergeArray2 = [4, 5, 6];
const mergedArray = mergeArray1.concat(mergeArray2);
​
// 4. 배열 잘라내기(원본 배열을 변경하지 않음)
const slicedArray = exampleArray.slice(2, 4);

배열 순회

  • for문을 사용하는 것이 일반적
  • for of 문을 사용하면 배열의 각 요소를 변수에 담아 접근 가능(직관적)
const exampleArray = [1, 2, 3, 4, 5];
​
// 1. for문을 사용한 순회
for (let i = 0; i < exmapleArray.length; i++){
 console.log(exampleArray[i]);
}
​
// 2. for of 문을 사용한 순회
for (const item of exampleArray) {
 console.log(item);
}

Reference

프로그래머스의 코딩테스트 광탈 방지 A to Z : JavaScript