[알고리즘] 배열( 순차 리스트)

2022. 4. 20. 16:57·알고리즘/풀이 힌트
반응형

1. 배열

연관된 데이터를 연속적인 형태로 구성된 구조를 가진다. 

배열에 포함된 원소는 순서대로 번호(index)가 붙는다. 

특징 

  • 고정된 크기를 가지며 일반적으론 동적으로 크기를 늘릴 수 없다.
    - 자바스크립트처럼 스크립트 언어의 경우 동적으로 크기가 증감되어진다. 
  • 원하는 원소의 index를 알고 있다면 O(1)로 원소를 찾을 수 있다. 
  • 원소를 삭제하면 해당 index에 빈자리가 생긴다. 

2. 배열의 요소 삭제

[1, 1, 2, 3, 5, 7, 10, 13, 34] 인 배열이 있다. 여기서 7을 제거할 경우 진행되는 방법을 보자면 

 

1.  7이 삭제된다. 

 => [1, 1, 2, 3, 5, `  `, 10, 13, 34]

 

2. 10이 앞으로 한칸 이동한다. 

 => [1, 1, 2, 3, 5, 10, `  `, 13, 34]

 

3. 13이 앞으로 한칸 이동한다. 

 => [1, 1, 2, 3, 5, 10, 13, `  `, 34]

 

4. 34가 앞으로 한칸 이동한다.

 => [1, 1, 2, 3, 5, 10, 13,  34,`  `]

 

총 4번의 작업이 진행되었는데, 만약 첫 번째 인자가 삭제되는 최악의 경우엔 O(n)의 시간 복잡도를 가지게 된다. 

 

3. 배열의 중간에 요소 추가

마찬가지로 [1, 1, 2, 3, 5, 7, 10, 13, 34] 인 배열이 있다. 여기서 7 앞에 요소 50을 추가할 경우 진행을 보자면

 

1. 34가 뒤로 한칸 이동한다. 

=> [1, 1, 2, 3, 5, 7, 10, 13, ` ` , 34] 

 

2.  13이 뒤로 한칸 이동한다. 

=> [1, 1, 2, 3, 5, 7, 10, ` `, 13 , 34] 

 

3. 10이 뒤로 한칸 이동한다.

=> [1, 1, 2, 3, 5, 7, ` `, 10, 13 , 34] 

 

4. 7이 뒤로 한칸 이동한다. 

=> [1, 1, 2, 3, 5, 50, 7, 10, 13 , 34] 

 

만약 첫 번째 인자에 요소를 추가할 경우 O(n)의 시간 복잡도를 가지게 된다.

 

따라서 추가와 삭제가 반복되는 로직이라면 배열 사용을 권장하지 않는다.

배열은 탐색이 많은 경우 유리하다. 

 

 

4. 배열 생성

5. 배열 요소 추가, 삭제 

6. 배열의 특이점

특이점으로 자바스크립트의 배열은 HashMap에 가깝다. 

index가 number가 아닌 string, boolean이더라고 key값이 string을 둔 속성값으로 선언할 수 있다. 

 

반응형
저작자표시 비영리 변경금지

'알고리즘 > 풀이 힌트' 카테고리의 다른 글

[알고리즘] 이진 탐색 - JavaScript  (1) 2022.07.29
[알고리즘] 배열을 반복해 순차적으로 값을 변경 및 수정하기  (1) 2022.07.28
[알고리즘] 자바스크립트 9가지 코드 트릭  (5) 2022.04.19
[알고리즘] 시간 복잡도  (0) 2022.04.11
[알고리즘] 자료구조? 알고리즘?  (0) 2022.04.10
'알고리즘/풀이 힌트' 카테고리의 다른 글
  • [알고리즘] 이진 탐색 - JavaScript
  • [알고리즘] 배열을 반복해 순차적으로 값을 변경 및 수정하기
  • [알고리즘] 자바스크립트 9가지 코드 트릭
  • [알고리즘] 시간 복잡도
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    자바스크립트
    Node.js
    리액트
    타입스크립트
    redux
    네트워크
    타일러영어
    typescript
    영어독학
    webpack
    react
    리얼클래스
    바질
    ReactNative
    다이소
    CCNA
    next.js
    Docker
    알고리즘
    CSS
    바질 키우기
    Babel
    ChatGPT
    덤프
    네이버 부스트캠프
    javascript
    프로그래머스
    식물
    리얼학습일기
    영어회화
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[알고리즘] 배열( 순차 리스트)
상단으로

티스토리툴바