프로그래밍/C,C++

배열(array) 예제와 함께 가볍게 알아보기

gameObject 2023. 6. 5. 20:39
728x90

배열은 둘 이상의 변수를 연속적으로 모아 놓은 것이다.

 

프로그램에서 지역변수 선언해주게 되면

메모리는 차곡차곡 쓰는것이 아니라, 공간상에 비어있는곳에 아무렇게나 할당된다. (무규칙하다)

 

그러나 배열을 통해 변수를 선언하게 되면

첫번째 주소는 무규칙 >> 두번째 주소는 첫번째 주소에 딱 붙여서 생긴다.

즉 공간을 효율적으로 사용할 수 있기 때문에 공간을 아낄 수 있다.

 

참고로 아래 사진에서 배열은 데이터형이 int이기 때문에 각각의 공간 하나는 4byte이다.

int numbers[5]는 4byte * 5 = 20byte를 메모리에서 차지한다.

 

 

배열의 선언방법

1) int numbers[5];

   numbers[0] = 1; ~~~~~ 입력해주기

2) int numbers[5] = {1,2,3,4,5};  >> 바로 입력해주기

3) int numbers[5] = {0,} >> 하나만 입력해주기 >> 하나 입력해주면 나머지는 다 0으로 들어감.

 

테스트 예제

// 배열이란 무엇인지 테스트해보자

#include<iostream>

void Description003(); // 배열 테스트 함수


int main(){
    Description003();
}

void Description003()
{
    int numbers[5]; // 배열 선언방식 1

    numbers[0] = 1; //배열의 각각의 공간에 값을 대입해주는 식
    numbers[1] = 2;
    numbers[2] = 3;
    numbers[3] = 4;
    numbers[4] = 5;

    int numbers2[5] = {10, 20, 30, 40, 50}; // 배열 선언방식 2
    int numbers3[5] = {0,}; // 배열 선언방식 3

    //for문으로 배열에 값 대입해주기
    for(int i=0; i<5;i++)
    {
        numbers3[i] = (i+1)*100; // numbers3의 i번째 배열공간에 (i+1)*100값 대입
    }

    printf("배열의 값[인덱스/값],[%d / %d]\n",0, numbers[0]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",1, numbers[1]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",2, numbers[2]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",3, numbers[3]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",4, numbers[4]);

    printf("배열의 값[인덱스/값],[%d / %d]\n",0, numbers2[0]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",1, numbers2[1]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",2, numbers2[2]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",3, numbers2[3]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",4, numbers2[4]);

    printf("배열의 값[인덱스/값],[%d / %d]\n",0, numbers3[0]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",1, numbers3[1]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",2, numbers3[2]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",3, numbers3[3]);
    printf("배열의 값[인덱스/값],[%d / %d]\n",4, numbers3[4]);

}

 

배열로 구구단 만들기

#include <iostream>

int main()
{
    int lineCount[9] = {0};
    int lineCount2[9];

    for(int i = 0; i < 9; i++){ // 첫 번째 숫자 배열
        
        lineCount[i] = i+1;

        for(int j= 0; j <9; j++) // 두 번째 숫자 배열
        {
            lineCount2[j] = j+1;
            printf("%d * %d = %d\n",lineCount[i],lineCount2[j],lineCount[i]*lineCount2[j]);
        }
    }
}

 

 

배열을 이용해서 0을 움직이는 예제)

hard : 0**** >> *0*** >> **0** >> ***0* >> ****0

veryhard : a를 누르면 왼쪽으로, 다른키 누르면 오른쪽으로

// 문제
// hard 출력되는 0을 엔터하나 입력할때 마다 오른쪽으로 한칸씩 이동하게하기
// very hard : 위의 프로그램을 수정해서 a로 0이 왼쪽, d로 0이 오른쪽 이동 가능하도록 만들기

#include <iostream>
#include <stdlib.h>

void hard();
void hard2();
void veryHard();

int main()
{
    //hard();
   //hard2();
   veryHard();

}

void veryHard()
{
    char board[5] = {0,};
    char key = '0';
    
    // {board를 초기화 하는 로직
    for(int a = 0; a<5; a++)
    {
        for(int i = 0; i<5; i++)
        {
            board[i] = '*';
            if(i==a)
            {
            board[i] = '0';
            }
        } 
            // board를 초기화 하는 로직}
            
            // {board를 출력하는 로직
        for (int i = 0; i < 5; i++)
        {
            printf("%c ",board[i]);
        }

        std::cin>>key;
        
        if(key == 'A' || key =='a')
        {
            a = a - 2;
        }
        
        printf("\n\n");
    }
    
}

void hard2()
{
    char board[5] = {0,};
    
    // {board를 초기화 하는 로직
    for(int a = 0; a<5; a++)
    {
        for(int i = 0; i<5; i++)
        {
            board[i] = '*';
            if(i==a)
            {
            board[i] = '0';
            }
        } 
            // board를 초기화 하는 로직}
            
            // {board를 출력하는 로직
        for (int i = 0; i < 5; i++)
        {
            printf("%c ",board[i]);
        }
        getchar();
        printf("\n\n");
    }
    
}

void hard()
{
    char board[5] = {0,};
   int count = 1;

   while(count < 6)
    {
        getchar();

        // {board를 초기화 하는 로직
        switch(count)
        {
          case 1: 
            for(int i = 0; i<5; i++)
            {
                board[i] = '*';
                if(i==0)
                {
                board[i] = '0';
                }
            } 
            // board를 초기화 하는 로직}
            
            // {board를 출력하는 로직
            for (int i = 0; i < 5; i++)
            {
                printf("%c ",board[i]);
            }
            break;
            case 2: 
            for(int i = 0; i<5; i++)
            {
                board[i] = '*';
                if(i==1)
                {
                board[i] = '0';
                }
            } 
            // board를 초기화 하는 로직}
            
            // {board를 출력하는 로직
            for (int i = 0; i < 5; i++)
            {
                printf("%c ",board[i]);
            }
            break;
            case 3: 
            for(int i = 0; i<5; i++)
            {
                board[i] = '*';
                if(i==2)
                {
                board[i] = '0';
                }
            } 
            // board를 초기화 하는 로직}
            
            // {board를 출력하는 로직
            for (int i = 0; i < 5; i++)
            {
                printf("%c ",board[i]);
            }
            break;
            case 4: 
            for(int i = 0; i<5; i++)
            {
                board[i] = '*';
                if(i==3)
                {
                board[i] = '0';
                }
            } 
            // board를 초기화 하는 로직}
            
            // {board를 출력하는 로직
            for (int i = 0; i < 5; i++)
            {
                printf("%c ",board[i]);
            }
            break;
            case 5: 
            for(int i = 0; i<5; i++)
            {
                board[i] = '*';
                if(i==4)
                {
                board[i] = '0';
                }
            } 
            // board를 초기화 하는 로직}
            
            // {board를 출력하는 로직
            for (int i = 0; i < 5; i++)
            {
                printf("%c ",board[i]);
            }
            break;
            // board를 출력하는 로직}
        }
        count++;
    }

    printf("\n\n");
}
728x90