[CS] 배열(Array)

giggle·2023년 8월 20일
0

📌 배열(Array)란?

배열은 프로그래밍에서 데이터를 저장하고 관리하기 위한 자료구조입니다. 배열은 같은 데이터 타입의 요소들이 순차적으로 나열되어 있으며, 각 요소는 인덱스를 통해 접근할 수 있습니다. 배열은 메모리 상에서 연속적인 공간에 요소들을 저장하며, 인덱스를 통해 각 요소에 접근할 때에는 인덱스 값으로부터 해당 요소의 메모리 위치를 계산하여 접근합니다.

배열의 특징은 정적이라는 점과 연속적이라는 것이죠. 정적이라는 말은 처음 배열의 크기가 정해지면 크기를 변경할 수 없음을 뜻합니다. 연속적이라는 건 메모리 상에서 배열의 첫번째 요소는 두번째 요소와 연이어 붙어있다는 것을 말합니다. 즉, 모든 요소들이 저장된 위치는 연속적으로 붙어있습니다.

배열 메모리 구조

  • 배열 변수는 참조 변수에 속함
  • 배열도 객체이므로 힙 영역에 생성
  • 배열 변수는 힙 영역의 배열 객체를 참조하게 됨

변수 : 기본 자료형 데이터 값을 메모리에 저장
배열 변수 : 배열 객체의 주소(레퍼런스)를 저장

int a = 10; // 메모리 안에 10을 저장
int[] b = {10,20,30} // 메모리에 배열 객체 {10,20,30} 의 레퍼런스를 저장.
// 즉, 배열 변수 b는 메모리 안에 배열 객체 {10,20,30} 의 주소를 저장하고 있어서,
// b는 객체 {10,20,30} 을 가리킨다.

장점

  • 간단하고 직관적인 데이터 저장 방식입니다.
  • 인덱스를 통한 빠른 요소 접근이 가능합니다.
  • 메모리 연속성으로 인한 캐시 효율이 높습니다.

단점

  • 크기가 고정되어 있어 크기 조정이 어렵습니다.
  • 삽입, 삭제 작업이 느리며, 중간에 요소를 삽입하거나 삭제하는 것이 복잡합니다.
  • 메모리 낭비가 발생할 수 있습니다.

📌 알고리즘

회전 알고리즘


temp를 활용해서 첫번째 인덱스 값을 저장 후 arr[0]~arr[n-1]을 각각 arr[1]~arr[n]의 값을 주고, arr[n]에 temp를 넣어줍니다.

저글링 알고리즘


최대공약수 gcd를 이용해 집합을 나누어 여러 요소를 한꺼번에 이동시키는 것

위 그림처럼 배열이 아래와 같다면

arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}

1,2,3을 뒤로 옮길 때, 인덱스를 3개씩 묶고 회전시키는 방법입니다.

a) arr [] -> { 4 2 3 7 5 6 10 8 9 1 11 12}

b) arr [] -> {4 5 3 7 8 6 10 11 9 1 2 12}

c) arr [] -> {4 5 6 7 8 9 10 11 12 1 2 3 }

역전 알고리즘

회전시키는 수에 대해 구간을 나누어 reverse로 구현하는 방법

d = 2이면

1,2 / 3,4,5,6,7로 구간을 나눕니다.

첫번째 구간 reverse -> 2,1

두번째 구간 reverse -> 7,6,5,4,3

합치기 -> 2,1,7,6,5,4,3

합친 배열을 reverse -> 3,4,5,6,7,1,2


참고


피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.

0개의 댓글