ABOUT ME

-

Today
-
Yesterday
-
Total
-

Post Calendar

«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
  • 선형자료구조 - 배열
    알고리즘/이론 2024. 4. 1. 17:36

    📌 배열

    1. 많은 수의 데이터를 다룰 때 사용하는 자료구조
    2. 각 데이터를 인덱스와 1:1 대응하도록 구성
    3. 데이터가 메모리 상에 연속적으로 저장

     

    장점

    • 인덱스를 이용하여 데이터에 빠르게 접근 가능

     

    단점

    • 데이터의 추가 / 삭제가 번거로운 편
      • 미리 최대 길이를 정해서 생성해야함
      • 가변 길이 배열은 배열의 크기를 변경할 때마다 새로운 배열을 생성
      • 데이터 삭제 시 인덱스를 유지하기 위해 빈 공간을 유지해야함

     


    1차원 배열

    int[] arr = {1, 2, 3, 4, 5};
    
    for(int item : arr) {
    	System.out.println("item = " + item);
    }
    
    // item = 1
    // item = 2
    // item = 3
    // item = 4
    // item = 5
    
    arr[1] = 100;
    System.out.println("arr = " + Arrays.toString(arr));
    // arr = [1, 100, 3, 4, 5]

     

    • 데이터를 순회하면서 출력할 시 => for each 문
    • 배열 이름 우측에 표시 = arr
    • 좌측에 데이터 타입 지정

     

    2차원 배열

    int[][] arr2 = {{1, 2, 3}, {4, 5, 6}};
    System.out.println(arr[0][1]);
    // 2
    
    for(int[] row : arr2) {
    	for(int item: row) {
        	System.out.println("item = " + item);
        }
        // item = 1
        // item = 2
        // item = 3
        // item = 4
        // item = 5
        // item = 6
    }

     

    • 2차원 배열 사용 시 배열 이름 arr2를 통해서 처음 순회하는 for each 문에서는 1차원 배열이기 때문에 int[] 데이터 타입 지정해야함

     

    ArrayList - 1차원 , 2차원

    ArrayList list1 = new ArrayList(Arrays.asList(1, 2, 3));
    System.out.println("list1 = " + list1);
    // list1 = [1, 2, 3]
    
    list1.add(4);
    list1.add(5);
    System.out.println("list1 = " + list1);
    // list1 = [1, 2, 3, 4, 5]
    
    list1.remove(2);
    System.out.println("list1 = " + list1);
    // list1 = [1, 2, 4, 5]
    
    list1.remove(Integer.valueOf(2));
    System.out.println("list1 = " + list1);
    // list = [1, 4, 5]
    
    ArrayList 1ist2d = new ArrayList();
    ArrayList list1d1 = new ArrayList(Arrays.asList(1, 2, 3));
    ArrayList list1d2 = new ArrayList(Arrays.asList(4, 5, 6));
    list2d.add(list1d1);
    list2d.add(list1d2);
    
    System.out.println("list1d1 = " + list1d1);
    // list1d1 = [1, 2, 3]
    
    System.out.println("list1d2 = " + list1d2);
    // list1d2 = [4, 5, 6]
    
    System.out.println("list2d = " + list2d);
    // list2d = [[1, 2, 3], [4, 5, 6]]

     


    Practice

    • 기본 배열 자료형을 이용한 배열의 생성, 삽입, 삭제 기능 구현
    • 배열 생성 시 사이즈가 Fix된 상태에서 만들어짐 => 삽입, 삭제 기능 구현 시 배열 사이즈 변경 해야함

    데이터 삽입

    // 배열 초기 사이즈 설정
    MyArray(int size) {
    	this.arr = new int[size];
    }
    
    // 배열 데이터 삽입
    public void insertData(int index, int data) {
    	if(index < 0 || index > this.arr.length) {
        	System.out.println("Index Error");
        	return;
        }
        
        int[] arrDup = this.arr.clone();   // 기존 배열 데이터 arrDup에 복사
        this.arr = new int[this.arr.length + 1]; // 기존 배열 사이즈보다 하나 더 큰 배열 생성
        
       	for(int i = 0; i < index; i++) {
        	this.arr[i] = arrDup[i];	// 데이터 추가하려는 인덱스까지는 기존 배열 데이터 삽입 
        }
        
        for(int i = index; i < this.arr.length; i++) {
        	this.arr[i] = arrDup[i - 1];
        }
        
        this.arr[index] = data;
    }

     

     

    데이터 삭제

    public void removeData(int data) {
    	int targetIndex = -1;
        
        for(int i = 0; i < this.arr.length; i++) {
        	if(this.arr[i] == data) {
            	targetIndex = i;
                break;
            }
         }
         
       	 if(targetIndex == -1) {
         	System.out.println("해당 데이터가 없습니다.");
         } else {
         	int[] arrDup = this.arr.clone();
            this.arr = new int(this.arr.length - 1);
            
            for(int i = 0; i < targetIndex; i++) {
            	this.arr[i] = arrDup[i];
            }
            
            for(int i = targetIndex; i < this.arr.length; i++) {
            	this.arr[i] = arrDup[i + 1];   // targetIndex에 해당하는 데이터는 제외하고, 나머지 데이터를 this.arr에 삽입
            }
         }
    }

     

    '알고리즘 > 이론' 카테고리의 다른 글

    선형자료구조 - 큐  (0) 2024.04.13
    선형자료구조 - 스택  (0) 2024.04.12
    선형자료구조 - 연결 리스트  (0) 2024.04.04
    재귀호출 리마인드 내용 정리  (4) 2024.03.29

    댓글

Designed by Tistory.