[자료구조] 배열과 문자열

맹쥐·2025년 3월 20일

정글-개발일지

목록 보기
6/24

1. 배열(Array)

배열은 같은 자료형의 데이터를 메모리상에 연속적으로 저장하는 자료구조이다. 각 데이터는 인덱스를 통해 접근한다.

💡이렇게 생긴 구조가 배열이다.

서랍장에 각각 번호가 붙어 있고, 인덱스를 통해 원하는 서랍에서 물건(데이터)을 꺼내는 것과 유사하다.
arr[0] = 10, arr[1] = 20, arr[2] = 30 이런식으로 인덱스를 통해 값에 접근 가능한 구조이다.


배열의 특징

  • 빠른 인덱스 접근 : O(1)
    → 인덱스로 데이터를 바로 불러올 수 있다.
  • 삽입/삭제는 느림 : 중간 삽입/삭제 시 O(N)
    → 배열에서 중간에 데이터를 삭제/삽입 시, 그 뒤 요소들을 한칸씩 밀거나 당겨야 한다. “박스를 다 들어서 다시 정렬”한다고 생각하면 쉽다. 그래서 시간복잡도가 O(N)인 것이다.
  • 메모리상 연속적인 공간할당
    → 배열은 메모리에서 하나의 블록으로 할당된다. 이 덕분에 인덱스 계산도 단순하게 시작 주소 + (인덱스 * 자료형 크기)로 바로 위치를 찾아갈 수 있다.

배열의 주요 연산 시간복잡도

연산시간복잡도
인덱스 접근O(1)
탐색O(N)
삽입 (중간)O(N)
삭제 (중간)O(N)

2. 문자열 (String)

문자열은 문자(char)의 집합으로 이루어진 자료구조이다. 쉽게 말해, 문자 배열로 구성되어 있으며, 문자열은 문자들이 순서대로 저장된 데이터의 묶음이다.

문자열 구조 예시

💡이렇게 생긴 구조가 문자열이다.

문자 하나하나가 박스 안에 저장되어 있으며, 배열처럼 인덱스를 통해 각 문자에 접근할 수 있다.
예를 들어 s = "hello" 라면, s[0] = 'h', s[1] = 'e' 이런 식으로 인덱스를 통해 개별 문자에 접근한다.


문자열의 특징

  • 빠른 인덱스 접근: O(1)
    → 배열처럼 문자열도 인덱스를 통해 각 문자를 빠르게 가져올 수 있다.
  • 수정이 어려움 (불변성)
    → Python과 Java 같은 언어에서는 문자열이 불변(immutable)이다. 즉, 문자열의 특정 인덱스를 직접 수정할 수 없고, 새로운 문자열을 만들어야 한다. 위에서 배운 배열과의 차이점이다.
  • 메모리 상 연속적인 공간에 저장됨
    → 문자열도 내부적으로 문자 배열로 연속적인 메모리에 저장된다.

문자열의 주요 연산 시간복잡도

연산시간복잡도
인덱스 접근O(1)
탐색 (in, find)O(N)
문자열 결합O(N)
슬라이싱O(N)

문자열의 실생활 비유

  • 문자열은 편지 봉투에 문자를 하나씩 순서대로 넣어둔 것과 비슷하다.
  • 봉투에 담긴 각 문자는 순서대로 꺼낼 수 있지만, 편지 봉투 안에서 직접 문자를 바꿀 수는 없다 (불변성 비유).

profile
이유민

0개의 댓글