Computer Science/자료구조

[자료구조] 배열 (Array)

2023. 5. 18. 02:12

배열이란?

배열 : 동일한 데이터 유형의 요소들을 일렬로 나열한 것

• 논리적 저장 순서와 물리적 저장 순서가 일치한다.

• 각 요소는 인덱스를 통해 접근할 수 있다.

• 메모리 상에 연속적으로 할당된다.

 

배열의 장단점

장점

1. 빠른 접근 : 인덱스를 통해 요소에 빠르게 접근할 수 있다. 시간복잡도는 O(1)이다.

단점

1. 크기 제한 : 생성할 때 크기를 정해야 하며, 이 크기는 변경할 수 없다.

2. 메모리 낭비 : 미리 정해진 크기를 사용하기 때문에 요소가 모두 채워지지 않는 경우 메모리를 낭비할 수 있다. 크기를 크게 설정하면 필요 이상의 메모리를 사용하게 되고, 작게 설정하면 요소를 저장할 공간이 부족해질 수 있다. 또한, 빈 메모리 공간이 배열의 크기 보다 작으면 사용할 수 없다.

3. 삽입/삭제 어려움 : 배열의 어느 요소를 삭제했다고 했을 때, 배열에 빈 공간이 생기며 연속적인 특징이 깨진다. 따라서 삭제한 요소보다 큰 인덱스를 갖는 요소들을 이동시켜야한다. 이때, 시간 복잡도는 O(n)이 된다. 삽입의 경우도 해당 요소보다 인덱스가 큰 요소들을 이동시켜야하기 때문에 이 경우도 O(n)의 시간이 요구된다.

 

배열을 사용하면 좋은 경우

• 표 형태의 데이터 : 배열은 다차원으로 구성될 수도 있는데, 2차원 배열은 행과 열로 구성되어 표 형태의 데이터를 표현하는 데 사용될 수 있다. 예를 들어, 2차원 배열은 행렬, 게임 보드, 이미지 픽셀 등을 다루는데 유용하다.

• 고정된 크기의 데이터 : 배열은 처음에 크기를 정해야 하기 때문에 데이터 개수가 변하지 않는 상황에서 유용하다. 예를 들어, 알파벳 문자열, 색상 목록, 각 월의 일수 등과 같이 크기가 일정한 데이터를 저장하는 데에 배열을 사용할 수 있다.

• 정렬된 데이터 : 정렬된 배열은 이진 탐색과 같은 효율적인 검색 알고리즘을 적용할 수 있어 빠른 검색 속도를 제공할 수 있기 때문에 데이터가 이미 정렬되어 있는 경우 배열은 유용한 선택일 수 있다.

• 인덱스 기반 접근이 필요한 경우 : 특정 위치에 있는 요소를 직접 참조해야 하는 경우에도 배열을 사용하는 것이 유리하다. 

 

배열을 사용하면 좋지 않은 경우

• 크기가 동적으로 변경되어야 하는 경우 : 배열은 크기가 고정되어 있으므로, 요소의 추가/제거가 빈번하게 발생하는 경우에는 사용이 적합하지 않다. 이 경우에는 동적 배열이나 연결 리스트와 같은 다른 데이터 구조를 고려해야 한다.

• 다양한 데이터 유형의 그룹 : 배열은 동일한 데이터 유형의 요소들을 저장하기 위한 것이다, 따라서 서로 다른 데이터 유형의 요소들을 저장하는 경우 배열의 사용이 적합하지 않다. 예를 들어, 학생 정보로 이름(문자), 나이(숫자) 라는 서로 다른 유형의 데이터를 저장해야 한다면, 배열 대신 구조체나 객체를 사용하는 것이 더 적절하다.

저작자표시 (새창열림)

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

[자료구조] 스택(Stack) & 큐(Queue)  (0) 2023.05.27
[자료구조] Array vs ArrayList vs LinkedList  (0) 2023.05.20
[자료구조] 연결리스트(LinkedList)  (0) 2023.05.20
[자료구조] Queue(큐) & Deque(덱)  (0) 2023.03.15
[자료구조] 스택 (Stack)  (0) 2023.03.13
'Computer Science/자료구조' 카테고리의 다른 글
  • [자료구조] Array vs ArrayList vs LinkedList
  • [자료구조] 연결리스트(LinkedList)
  • [자료구조] Queue(큐) & Deque(덱)
  • [자료구조] 스택 (Stack)
dbssk
dbssk
dbssk
K.Back-end
dbssk
  • 분류 전체보기 (220)
    • 끄적 (0)
    • TIL (8)
      • Trouble Shooting (1)
    • Programmers (94)
      • Lv.0 (29)
      • Lv.1 (40)
      • Lv.2 (25)
    • 백준 (15)
    • 구름 (0)
    • Computer Science (79)
      • 컴퓨터 구조 (3)
      • Operating System (18)
      • 알고리즘 (9)
      • 자료구조 (11)
      • Database (10)
      • Network (8)
      • Web (12)
      • Design Pattern (8)
    • Spring (2)
    • Languages (13)
      • Java (13)
    • 북 스터디 (9)
      • 스프링 부트 핵심 가이드 (9)
      • 자바 코딩 인터뷰 완벽 가이드 (0)
    • 프론트엔드 (0)

인기 글

최근 글

태그

  • hash
  • 개발자포트폴리오
  • stack
  • 개발자이력서
  • 자료구조
  • 개발자취업
  • 개발자취준
  • 배열
  • 코딩테스트
  • LV.1
  • 백엔드공부
  • 프로그래머스
  • 백준
  • LV.2
  • 백엔드스쿨
  • java
  • 스택
  • spring
  • 해시
  • Lv.0
hELLO · Designed By 정상우.
dbssk
[자료구조] 배열 (Array)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.