본문 바로가기
자료구조

자료구조 - 배열 JAVA / Python

by ddahu 2023. 2. 8.

자료구조 중 기초중의 기초 이고 가장 많이 사용 하고 응용하는게 배열이지 않을까 생각이 들정도로 중요하고 이해 하고 넘어가야하는 부분이다....ㅎ

 

일단 모르면 배열(리스트)로 푸는게 습관이 되어있다

 

배열(Array) 란? ( Java )

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

int [] arr = {5, 4, 3, 2, 1}

배열의 장점

  • 배열의 각 위치의 인덱스를 이용하여 데이터에 빠르게 접근이 가능하다

배열의 단점

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

리스트(List) 란? (python)

  • 배열과 같이 여러 개의 데이터를 나열한 자료구조.
  • Java와는 다르게 한 List 안에 숫자,문자(열), 논리형 등 모든 데이터들을 같이 저장 할 수 있다.
  • 리스트안에 또 다른 리스트를 넣을 수도 있다.

JAVA 배열 (삽입, 삭제 ) 코드 

-java 에서 배열은 직접적인 추가와 삭제가 불가능하므로 추가와 삭제를 하기 위해서는 새로 만들 배열(기본배열 copy)

와 기본배열(copy)이 필요하다.

public class ArrayCreate {
    int [] arr;

    ArrayCreate(int size){
        this.arr  = new int[size];
    }
    public void insertData(int index, int data){
        if(index <0 || index > this.arr.length){
            return;
        }
        int [] arrcpy = this.arr.clone();
        this.arr = new int[this.arr.length +1];

        for (int i = 0; i <index ; i++) {
            this.arr[i] = arrcpy[i];
        }
        for (int i = index; i <this.arr.length ; i++) {
            this.arr[i] = arrcpy[i-1];
        }
        this.arr[index] = data;
    }

    public void removeData(int data){
        int targetIdx = -1;
        for (int i = 0; i <this.arr.length ; i++) {
            if(this.arr[i] == data){
                targetIdx = i;
                break;
            }
        }
        if(targetIdx == -1){
            System.out.println("X");
        }else{
            int [] arrcpy = this.arr.clone();
            this.arr = new int[this.arr.length-1];
            for (int i = 0; i <targetIdx ; i++) {
                this.arr[i] = arrcpy[i];

            }
            for (int i = targetIdx; i <this.arr.length ; i++) {
                this.arr[i] = arrcpy[i+1];
            }
        }
    }


    public static void main(String[] args) {
        int size = 5;
        ArrayCreate arrc = new ArrayCreate(size);
        for (int i = 0; i < size; i++) {
            arrc.arr[i] = i +1;
        }
        System.out.println(Arrays.toString(arrc.arr));
        arrc.arr[0] = 10;
        System.out.println(Arrays.toString(arrc.arr));
        arrc.insertData(2,20);
        arrc.removeData(4);
        System.out.println(Arrays.toString(arrc.arr));
    }

 

 

출력결과

출력 결과

 

 

 

 

 


Python (List) 삽입 삭제 코드

Python 에서는 Java와는 다르게 동적으로 리스트에 삽입과 삭제가 가능하다.

append, insert , remove ... 와 같이 원하는 방법으로 삽입 삭제가 가능하

lst = [1,2,3,4,5] 
print(lst)
lst.append(100)
print(lst)
lst.insert(1,20)
print(lst)
lst.remove(5)
print(lst)
print(lst.index(3))
lst.remove(lst.index(3))
print(lst)
lst.extend([9,8,7,6,5])
print(lst)

출력 결과

append : 리스트에 오른쪽 부터 삽입

insert : insert( 인덱스 위치 ,  삽입할 데이터 값) 

remove : remove(삭제할 데이터 값)

index : index( 리스트에서 index 위치를 찾을 값)

remove(idx) : remove(리스트내에서 삭제해야할 인덱스 위치값)

extend : (확장 또는 추가) 


확실히 자바에 비해서는 파이썬이 배열을 다루기에는 간단한 면이 있다.

파이썬은 내장함수들을 많이 알고있다면 다양한 방법으로 배열조작이 가능하다.

자바 또한 ArrayList  가 존재하여 비슷하게 가능하다