전체 코드

#include <iostream>
using namespace std;

int main()
{
    // 1차원 배열
    int a[10] = { 1, 2, 3 };

    // 2차원 배열 (아파트 데이터)
    int apartment2D[2][5] = { {4, 2, 3, 4, 1}, {1, 1, 5, 2, 2} };

    cout << apartment2D[1][4] << endl;  // 출력: 2
    cout << "---------------------\n";

    // 2D 배열 출력
    for (int floor = 0; floor < 2; floor++) {
        for (int room = 0; room < 5; room++) {
            cout << apartment2D[floor][room] << " ";
        }
        cout << endl;
    }

    cout << "---------------------\n";

    // 1D 배열을 활용한 2D 표현
    int apartment1D[10] = { 4, 2, 3, 4, 1, 1, 1, 5, 2, 2 };
    for (int floor = 0; floor < 2; floor++) {
        for (int room = 0; room < 5; room++) {
            int index = (floor * 5) + room;
            cout << apartment1D[index] << " ";
        }
        cout << endl;
    }

    cout << "---------------------\n";

    // 2D 배열을 활용한 게임 맵
    int map[5][5] = {
        { 1, 1, 1, 1, 1 },
        { 1, 0, 0, 1, 1 },
        { 0, 0, 0, 0, 1 },
        { 1, 0, 0, 0, 0 },
        { 1, 1, 1, 1, 1 }
    };

    // 게임 맵 출력
    for (int y = 0; y < 5; y++) {
        for (int x = 0; x < 5; x++) {
            cout << map[y][x];
        }
        cout << endl;
    }

    return 0;
}

📌 1. 다차원 배열이란?

  • 일차원 배열(1D Array): 선형 데이터를 저장하는 구조
  • 이차원 배열(2D Array): 행과 열을 가진 2차원 데이터 구조
  • 삼차원 배열(3D Array): 여러 개의 2차원 배열을 모아 놓은 형태

활용 예시

  • 2D 로그라이크 게임 맵, 체스판, 행렬(Matrix) 연산
  • 1D 배열을 활용한 다차원 데이터 표현 (메모리 효율적인 관리)

📌 2. 1차원 배열 (1D Array)

int a[10] = { 1, 2, 3 };

기능: 크기가 10인 1차원 배열 선언
초기화: 1, 2, 3 이후의 나머지 값은 자동으로 0으로 초기화됨
메모리 배치:
[1][2][3][0][0][0][0][0][0][0]


📌 3. 2차원 배열 (2D Array)

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

기능:

  • 2층(행) 5방(열)을 가진 2차원 배열
  • apartment2D[층][방] 형태로 데이터 접근
    메모리 배치:
4 2 3 4 1  
1 1 5 2 2  

데이터 출력

for (int floor = 0; floor < 2; floor++)
{
    for (int room = 0; room < 5; room++)
    {
        int num = apartment2D[floor][room];
        cout << num << " ";
    }
    cout << endl;
}

📌 실행 결과

4 2 3 4 1  
1 1 5 2 2  

📌 4. 1차원 배열을 활용한 2차원 데이터 표현

int apartment1D[10] = { 4, 2, 3, 4, 1, 1, 1, 5, 2, 2 };

기능:

  • 2D 데이터를 1D 배열로 표현
  • 메모리 배치는 2D 배열과 동일
    인덱스 변환 공식:
    index = (floor * 5) + room
    출력 코드
for (int floor = 0; floor < 2; floor++)
{
    for (int room = 0; room < 5; room++)
    {
        int index = (floor * 5) + room;
        int num = apartment1D[index];
        cout << num << " ";
    }
    cout << endl;
}

📌 실행 결과

4 2 3 4 1  
1 1 5 2 2  

결론: 1D 배열로도 2D 배열처럼 활용 가능 (메모리 구조 동일)


📌 5. 2차원 배열을 활용한 게임 맵 (5x5)

int map[5][5] = {
    { 1, 1, 1, 1, 1 },
    { 1, 0, 0, 1, 1 },
    { 0, 0, 0, 0, 1 },
    { 1, 0, 0, 0, 0 },
    { 1, 1, 1, 1, 1 }
};

기능:

  • 1: 벽 (Wall)
  • 0: 길 (Path)
    맵 출력 코드
for (int y = 0; y < 5; y++)
{
    for (int x = 0; x < 5; x++)
    {
        int info = map[y][x];
        cout << info;
    }
    cout << endl;
}

📌 출력 결과

11111  
10011  
00001  
10000  
11111  

활용 예시:

  • 2D 게임 맵 표현
  • 경로 찾기 알고리즘 (예: BFS, A*)
  • 미로 찾기, 캐릭터 이동 로직

📌 6. 최종 정리

✅ 다차원 배열 핵심 개념

배열 유형설명
1차원 배열 (1D)단순 리스트 형태의 데이터 저장
2차원 배열 (2D)행과 열을 사용한 데이터 표현
1D 배열을 활용한 2D 표현메모리 최적화 방식, 연산 속도 동일
2D 배열 활용 (게임 맵)게임, 시뮬레이션, 그래픽 데이터 표현

✅ 메모리 접근

방법메모리 배치
apartment2D[floor][room]2D 배열 (행과 열을 사용)
apartment1D[(floor * 5) + room]1D 배열 (행렬 인덱싱)

✅ 언제 사용할까?

사용 사례적용 방법
게임 맵2D 배열 (map[y][x])
행렬(Matrix) 연산2D 배열 (matrix[row][col])
메모리 최적화1D 배열을 이용한 2D 변환

profile
李家네_공부방

0개의 댓글