코테 공부

자료구조 - 배열

개발자현우 2023. 4. 12. 13:12

자료구조 - 배열


순서(index)를 가진 데이터의 집합

  • 가장 기본적인 자료구조
Scanner sc = new Scanner(System.in)
int N = sc.nextInt();
int[] arr = new int[N]
for (int i = 0; i < Nl i++)
	arr[i] = sc.nextInt();	// 배열의 저장

long sum = 0;
for (int i=0; i < N; i++)
	sum += arr[i]	// 배열의 탐색, 원소의 접근
  • 생성과 동시에 크기가 고정됨
  • 전체 원소가 메모리상에 일렬로 저장됨

배열에 대한 아래 기능들의 시간복잡도는?

  • get(int idx): idx번째 원소 반환
    - 메모리가 연속적이기 때문에 arr의 시작 주소로부터 idx만큼 떨어진 원소의 주소를 바로 계산하고, 접근할 수 있다.
    ex)
public static int getElement(int[] arr , int idx) {
	return arr[idx];
}
  • change(int idx, int val): idx번째 원소를 val로 변경
    - [] 연산자를 통해 idx번 원소에 바로 접근하고, 값을 변경할 수 있다.
    ex)
public static void changeElement(int idx, int val) {
	arr[idx] = val;
}
  • append(int val): 가장 뒤에 원소 삽입
    - 한 번 생성된 배열은 고정 길이이다. 원소들이 연속되어있는 배열의 마지막에 원소를 추가할 때 이미 배열이 꽉 찼다면 그보다 큰 새 배열을 생성해 옮겨 닮아야 한다.
    ex)
public static boolean appendElement(int[] arr, int arrCount, int val) {
	if (arrCount == arr.length)
    	return false;
    arr[arrCount] = val;
    return true;
}
  • insert(int idx, int val): 현재 idx번째 원소의 앞에 원소 삽입
    - 원소들이 연속되어있는 배열의 중간에 원소를 추가하기 위해서는 추가되는 원소의 뒷 원소들이 모두 한 칸씩 뒤로 이동해 새 원소를 삽입할 수 있는 자리를 만들어야 한다.
    ex)
public static boolean insertElement(int[] arr, int arrCount, int idx, int val) {
	if (idx > arrCount || arrCount >= arr.length)
    	return false;
    for (int i = arrCount; i > idx; i--)
    	arr[i] = arr[i - 1];
    arr[idx] = val;    
    return true;
}
  • erase(int idx): idx번째 원소 삭제
    - 원소들이 연속되어있는 배열의 중간 원소를  삭제할때에는 해당 원소의 뒷 원소들을 모두 한 칸씩 앞으로 이동해야한다.
    ex)
public static boolean eraseElement(int[] arr, int arrCount, int idx) {
	if (idx >= arrCount)
    	return false;
    for (int i = idx; i < arrCount; i++)
    	arr[i] = arr[i + 1];
    return true;
}

 

원소에 접근하고 변경하는 것은 빠르나, 중간 원소를 추가/삭제하는 것은 최대 배열 원소의 개수까지 시간이 걸린다.

'코테 공부' 카테고리의 다른 글

[백준] 10989번 수 정렬하기 3 - Java  (0) 2023.04.18
[백준] 10431번 줄세우기 - Java  (0) 2023.04.17
시간복잡도  (0) 2023.04.12
[백준] 1546번 평균 - Java  (0) 2023.04.12
[백준]10813번 문제 공바꾸기 - Java  (0) 2023.04.12