정보공유 같이해요/TECH

[ 배열 ] 배열은 무엇이고 어떻게 활용하는가? ( 예제 포함 )

Rio - Moon 2024. 10. 21. 15:57
728x90
반응형

 

이번포스팅에서는 배열이란 무엇인가? 그리고 어떻게 활용할수있는지에 대해 알아보겠습니다.

 

프로그래밍의 기초 에 대해 궁금하시면 아래 포스팅을 같이 참고해주세요

 

 

# 1. 배열이란 무엇인가?

배열은 데이터를 정해진 크기의 연속적인 메모리 공간에 저장하는 가장 기본적인 자료구조입니다.

배열을 사용하면 동일한 타입의 여러 데이터를 순차적으로 저장할 수 있습니다. 배열은 고정된 크기를 가지며, 각 요소는 인덱스를 사용해 접근할 수 있다는 특징이 있습니다. 배열은 컴퓨터 프로그램에서 데이터를 정리하고 효율적으로 접근하기 위해 가장 많이 사용하는 자료구조 중 하나입니다.

 

배열 vs 리스트

 

# 2. 배열의 정의 및 특징

배열은 데이터의 모음이며, 각 데이터는 동일한 타입을 가집니다.

 

배열의 주요 특징

  • 정적인 크기: 배열은 선언 시 크기가 고정되며, 나중에 크기를 변경할 수 없습니다. 따라서 데이터의 크기를 미리 알고 있는 경우 배열이 유용합니다.

  • 연속된 메모리 위치: 배열에 저장된 데이터는 연속된 메모리 위치에 저장되기 때문에, 특정 인덱스에 있는 데이터를 빠르게 접근할 수 있습니다. 이러한 특징 덕분에 배열은 데이터 접근 속도가 매우 빠릅니다.

  • 고정된 타입: 배열은 동일한 데이터 타입만 저장할 수 있기 때문에, 데이터 타입에 대해 일관성을 유지할 수 있습니다.
배열의 특징

 

 

 

# 3. 1차원 배열과 2차원 배열

배열은 다양한 형태로 존재할 수 있지만, 가장 기본적인 형태는 1차원 배열입니다.

1차원 배열은 단순히 하나의 행으로 구성된 데이터 집합입니다. 예를 들어 학생들의 점수를 저장하기 위해 점수 목록을 배열로 만들 수 있습니다.

2차원 배열은 행과 열로 구성된 배열로, 일반적으로 테이블 형태의 데이터를 저장할 때 유용합니다. 예를 들어, 학교의 여러 학급 학생들의 점수를 저장하기 위해 2차원 배열을 사용할 수 있습니다. 2차원 배열은 각 요소에 행과 열 인덱스를 통해 접근합니다.

 

예시

  • 1차원 배열: int scores[5] = {95, 88, 72, 60, 99};
  • 2차원 배열: int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

 

 

 

 

# 4. 배열의 메모리 구조

배열은 메모리에서 연속된 위치에 저장되며, 배열의 각 요소는 고정된 크기를 가지므로 특정 요소에 접근하기 위해서는 시작 주소에 인덱스와 요소 크기를 곱해 계산할 수 있습니다. 예를 들어, int 타입의 배열의 경우 각 요소의 크기는 4바이트입니다. 배열의 인덱스를 통해 이러한 연산이 간단히 이루어지기 때문에 데이터 접근 속도가 매우 빠릅니다.

 

 

 

# 5. 배열을 이용한 연산 ( 검색, 삽입, 삭제 )

 

1. 검색 (Search)

배열에서 특정 값을 찾는 검색 연산은 순차 검색(Linear Search) 또는 배열이 정렬된 경우 이진 검색(Binary Search) 알고리즘을 사용할 수 있습니다. 순차 검색은 배열의 모든 요소를 순서대로 비교하며, 이진 검색은 배열을 절반으로 나누어 빠르게 검색을 진행합니다.

 

2. 삽입 (Insert)

배열에 새로운 요소를 삽입하는 것은 간단하지만, 배열의 크기가 고정되어 있기 때문에 중간에 삽입하려면 나머지 요소들을 뒤로 밀어야 하며, 배열의 크기를 초과할 경우 삽입이 불가능합니다. 따라서 삽입 연산은 비효율적일 수 있습니다.

 

3. 삭제 (Delete)

배열에서 요소를 삭제할 경우, 삭제된 요소 뒤에 있는 모든 요소를 한 칸씩 앞으로 이동해야 합니다. 이 때문에 삭제 연산도 배열에서 효율적이지 않을 수 있습니다.

 

 

 

 

# 6.다차원 배열의 사용 및 응용

배열은 다차원으로 확장할 수 있으며, 2차원 이상의 배열은 행렬 연산이나 이미지 처리와 같은 복잡한 데이터를 다룰 때 매우 유용합니다. 예를 들어, 게임에서 맵 데이터를 저장하거나, 그래픽 이미지의 픽셀 데이터를 저장하는 데 2차원 이상의 배열을 사용할 수 있습니다. 이러한 다차원 배열을 통해 보다 복잡한 데이터 구조를 효과적으로 표현하고 관리할 수 있습니다.

 

 

 

# 7.실습: 배열을 이용한 간단한 정렬 및 검색 알고리즘 구현

배열의 기본 개념을 익혔다면, 이제 배열을 사용하여 간단한 알고리즘을 구현해볼 수 있습니다. 가장 기본적인 정렬 알고리즘으로는 버블 정렬(Bubble Sort) 이 있습니다. 버블 정렬은 인접한 요소를 비교하여 큰 값을 뒤로 보내면서 정렬하는 방식으로 작동합니다.

실습 예시 : 버블 정렬

# 버블 정렬 구현 예시
# 배열을 오름차순으로 정렬하는 버블 정렬 알고리즘입니다.

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        # 마지막 i개의 요소는 이미 정렬된 상태이므로 반복하지 않습니다.
        for j in range(0, n-i-1):
            # 인접한 두 요소를 비교하여 더 큰 값을 뒤로 보냅니다.
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

# 배열 예시
arr = [64, 34, 25, 12, 22, 11, 90]
print("정렬 전 배열:", arr)

# 버블 정렬 수행
bubble_sort(arr)
print("정렬 후 배열:", arr)

 

이와 같이 간단한 정렬 알고리즘을 구현하여 배열 내 데이터를 정렬할 수 있습니다. 또한, 순차 검색(Linear Search) 알고리즘을 통해 배열에서 특정 데이터를 찾아볼 수 있습니다.

실습 예시 : 순차 검색

# 순차 검색 구현 예시
# 배열에서 특정 값을 찾는 순차 검색 알고리즘입니다.

def linear_search(arr, target):
    # 배열의 각 요소를 하나씩 검사합니다.
    for i in range(len(arr)):
        if arr[i] == target:
            return i  # 요소를 찾으면 인덱스를 반환합니다.
    return -1  # 요소를 찾지 못한 경우 -1을 반환합니다.

# 배열과 찾고자 하는 값
arr = [64, 34, 25, 12, 22, 11, 90]
target = 25

# 순차 검색 수행
result = linear_search(arr, target)
if result != -1:
    print(f"값 {target}은(는) 인덱스 {result}에 있습니다.")
else:
    print(f"값 {target}을(를) 찾을 수 없습니다.")

 

이와 같이 순차 검색을 사용하여 배열에서 원하는 값을 찾을 수 있으며, 배열 내 모든 요소를 하나씩 확인하기 때문에 시간 복잡도는 O(n)입니다.

 

 

 

 

# 8.마무리

 

배열은 가장 기본적이면서도 중요한 자료구조로, 데이터를 효율적으로 저장하고 접근할 수 있도록 돕습니다.

배열을 사용하여 데이터를 구조화하고, 다양한 연산을 구현함으로써 프로그램의 성능을 향상시킬 수 있습니다. 배열의 기본적인

사용법을 이해하고, 이를 활용한 문제 해결 능력을 기르는 것은 프로그래머로서의 기초 역량을 다지는 데 중요합니다.

자료구조의 기초인 배열을 완벽히 이해하고 다양한 알고리즘을 실습해 보세요!

 

 

 

반응형