배열은 프로그래밍에서 데이터를 저장하고 관리하기 위한 자료구조입니다. 배열은 같은 데이터 타입의 요소들이 순차적으로 나열되어 있으며, 각 요소는 인덱스를 통해 접근할 수 있습니다. 배열은 메모리 상에서 연속적인 공간에 요소들을 저장하며, 인덱스를 통해 각 요소에 접근할 때에는 인덱스 값으로부터 해당 요소의 메모리 위치를 계산하여 접근합니다.
배열의 특징은 정적이라는 점과 연속적이라는 것이죠. 정적이라는 말은 처음 배열의 크기가 정해지면 크기를 변경할 수 없음을 뜻합니다. 연속적이라는 건 메모리 상에서 배열의 첫번째 요소는 두번째 요소와 연이어 붙어있다는 것을 말합니다. 즉, 모든 요소들이 저장된 위치는 연속적으로 붙어있습니다.
변수 : 기본 자료형 데이터 값을 메모리에 저장
배열 변수 : 배열 객체의 주소(레퍼런스)를 저장
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
피드백 및 개선점은 댓글을 통해 알려주세요😊