본문 바로가기
-----ETC-----/C++로 배우는 알고리즘과 자료구조 시리즈

[C++로 배우는 알고리즘과 자료구조] Day 2: 배열과 문자열

by cogito21_cpp 2024. 8. 1.
반응형

배열 (Array)

배열은 동일한 타입의 요소들이 연속적으로 저장된 자료구조입니다. 배열은 고정된 크기를 가지며, 인덱스를 사용하여 요소에 접근할 수 있습니다. 배열은 C++에서 가장 기본적인 자료구조 중 하나입니다.

배열의 특징:

  1. 고정된 크기: 배열의 크기는 생성 시 결정되며, 변경할 수 없습니다.
  2. 빠른 접근 속도: 인덱스를 사용하여 O(1) 시간 복잡도로 요소에 접근할 수 있습니다.
  3. 연속된 메모리 공간: 배열은 연속된 메모리 공간에 저장됩니다.

배열 예제

#include <iostream>

int main() {
    // 배열 선언 및 초기화
    int arr[5] = {1, 2, 3, 4, 5};

    // 배열의 크기
    int size = sizeof(arr) / sizeof(arr[0]);

    // 배열의 요소 출력
    for (int i = 0; i < size; i++) {
        std::cout << "arr[" << i << "] = " << arr[i] << std::endl;
    }

    return 0;
}

 

문자열 (String)

문자열은 문자(char)의 배열로, null 문자('\0')로 끝나는 특수한 배열입니다. C++에서는 문자열을 다루기 위해 표준 라이브러리에서 제공하는 std::string 클래스를 사용합니다.

문자열의 특징:

  1. 가변 크기: std::string 클래스는 동적으로 크기를 조절할 수 있습니다.
  2. 다양한 연산 지원: 문자열 연결, 비교, 부분 문자열 추출 등의 다양한 연산을 지원합니다.
  3. 편리한 인터페이스: 문자열을 쉽게 다룰 수 있는 다양한 멤버 함수를 제공합니다.

문자열 예제

#include <iostream>
#include <string>

int main() {
    // 문자열 선언 및 초기화
    std::string str = "Hello, World!";

    // 문자열의 크기
    int size = str.size();

    // 문자열의 요소 출력
    for (int i = 0; i < size; i++) {
        std::cout << "str[" << i << "] = " << str[i] << std::endl;
    }

    // 부분 문자열 추출
    std::string substr = str.substr(7, 5);
    std::cout << "부분 문자열: " << substr << std::endl;

    // 문자열 연결
    std::string str2 = " C++";
    std::string result = str + str2;
    std::cout << "문자열 연결: " << result << std::endl;

    return 0;
}

 

배열과 문자열의 활용 예제

배열 예제: 배열의 최대값 찾기

#include <iostream>

// 배열의 최대값을 찾는 함수
int findMax(int arr[], int size) {
    int maxVal = arr[0]; // 초기 최대값 설정
    for (int i = 1; i < size; i++) {
        if (arr[i] > maxVal) {
            maxVal = arr[i]; // 새로운 최대값 발견 시 갱신
        }
    }
    return maxVal; // 최종 최대값 반환
}

int main() {
    // 예제 배열
    int arr[] = {3, 5, 7, 2, 8, -1, 4, 10, 12};
    int size = sizeof(arr) / sizeof(arr[0]);

    // 배열의 최대값 계산 및 출력
    int maxVal = findMax(arr, size);
    std::cout << "배열의 최대값: " << maxVal << std::endl; // 결과 출력

    return 0;
}

 

문자열 예제: 문자열 뒤집기

#include <iostream>
#include <string>

// 문자열을 뒤집는 함수
std::string reverseString(const std::string& str) {
    int n = str.size();
    std::string reversedStr = str;
    for (int i = 0; i < n / 2; i++) {
        std::swap(reversedStr[i], reversedStr[n - i - 1]); // 대칭 위치의 문자 교환
    }
    return reversedStr; // 뒤집힌 문자열 반환
}

int main() {
    // 예제 문자열
    std::string str = "Hello, World!";

    // 문자열 뒤집기 및 출력
    std::string reversedStr = reverseString(str);
    std::cout << "뒤집힌 문자열: " << reversedStr << std::endl; // 결과 출력

    return 0;
}

 

설명

  1. 배열의 최대값 찾기:
    • 입력: 정수 배열 ( arr )와 배열의 크기 ( size )
    • 출력: 배열의 최대값
    • 시간 복잡도: O(n) (배열의 모든 요소를 한 번씩 순회하기 때문)
  2. 문자열 뒤집기:
    • 입력: 문자열 ( str )
    • 출력: 뒤집힌 문자열
    • 시간 복잡도: O(n) (문자열의 모든 문자를 한 번씩 순회하고 교환하기 때문)

이제 배열과 문자열의 기본 개념을 이해했습니다. 다음 단계로 넘어가며, 더 복잡한 자료구조와 알고리즘을 학습해보겠습니다.

질문이나 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "Day 3: 연결 리스트 (단일, 이중, 원형)"에 대해 학습하겠습니다.

반응형