개요

배열의 개념과 예제를 통한 이해


배열

같은 데이터 타입의 여러 변수를 하나의 묶음으로 나타낸 것

배열은 데이터타입에 대한 동일한 크기로 메모리상에 연속된 공간이 할당된다.

* 배열은 배열명이 메모리의 시작 주소이다.

 

int studentNumber[10];

- 10개의 int들이 묶인 배열을 선언한다!

 

n차원 배열

배열이 (개념적으로) 다중으로 구성되어 있는 것

 

1차원 배열 : int studentNumber[5]; // 5개의 int로 구성

                 → 5명의 학생이 있다.

 

2차원 배열 : int studentNumber[3][5]; // 15개의 int로 구성

                 → 3개의 반에 5명의 학생이 있다.

 

3차원 배열 : int studentNumber[4][3][5]; // 60개의 int로 구성

                 → 4개의 학년에 각각 3개의 반이 존재, 각 반에는 5명의 학생이 있다.

 

int student_nums[3][5] = { {1, 2, 3, 4, 5} ,
                           {6, 7, 8, 9, 10} ,
                           {11, 12, 13, 14, 15} };

for (int j = 0; j < 3; j++)
{
    for (int i = 0; i < 5; i++)
    {
        cout << student_nums[j][i] << endl;
    }
}

 

* 다차원 배열이라도 메모리에는 순서대로 저장된다.

cout << student_nums[0][6] << endl; // [1][1]에 해당하는 7이 출력된다.

 

배열을 활용한 예제

< 조건 >

5턴 안에 A ~ Z 사이의 값을 맞추는 업다운 게임을 만들어라!

srand(time(NULL));

// 아스키 코드 : A = 65 / Z = 90 / a = 97 / z = 122
int correct = rand() % (90 - 65 + 1) + 65;
int playTime = 1;
int maxChance = 5;
int inputKey;

cout << "총 5번 안에 정답을 맞추시오(대/소문자 구분 없음)..........(A ~ Z)" << endl;

while (true)
{
    // 입력
    while (true)
    {
        inputKey = _getch();
        if (inputKey >= 97)
        {
            inputKey -= 32;
        }

        if (inputKey >= 65 && inputKey <= 90) // a~z까지 입력을 했다면
        {
            cout << (char)inputKey << " 을(를) 선택하였습니다." << endl;
            break; // while문 탈출
        }
        else 
        {
            cout << "잘못된 값을 입력하였습니다. 다시 입력해 주세요." << endl;
        }
    }
    // 소문자는 -32 해주는걸로 해야하나..

    // 승리
    if(inputKey == correct)
    {
        cout << "GameClear! 승리하였습니다. 게임을 종료합니다." << endl;
        break;
    }

    maxChance--;

    // 패배
    if (maxChance <= 0) 
    {
        cout << "당신은 패배자입니다. 정답은 " << (char)correct << " 입니다." << endl;

        cout << "다시 도전 하시겠습니까?..........(y/n)" << endl;

        inputKey = _getch();
        if (inputKey >= 97)
        {
            inputKey -= 32;
        }

        if (inputKey == 89) // y
        {
            //재도전
            playTime++;
            maxChance = 5;
            correct = rand() % (90 - 65 + 1) + 65;
            cout << playTime << "회차 시작!" << endl;
            cout << "총 5번 안에 정답을 맞추시오 (범위 : A ~ Z) (대/소문자 구분 없음)" << endl;
        }
        else // n 또는 그 외
        {
            // 게임종료
            cout << "GameOver...게임을 종료합니다." << endl;
            break;
        }
    }
    else 
    {
        // 힌트
        if (inputKey < correct)
        {
            cout << "선택한 알파벳 " << (char)inputKey << " 보다 뒤에 있습니다." << endl;
        }
        else
        {
            cout << "선택한 알파벳 " << (char)inputKey << " 보다 앞에 있습니다." << endl;
        }

        cout << "다시 선택해 주세요. (남은 기회 : " << maxChance << ")" << endl;
    }

}
728x90

'Program > C (C++,C#)' 카테고리의 다른 글

[C++] 구조체  (0) 2022.04.15
[C++] 콘솔용 탈출게임  (0) 2022.04.13
[C++] 구구단 & 별찍기  (0) 2022.04.12
[C++] 제어문  (0) 2022.04.12
[C++] 난수  (0) 2022.04.11

+ Recent posts