국비지원으로 에티버스러닝에서 수업을 들은지도 이제 한달이 되었다. 한달의 절반을 C++수업을 듣고 있는데, 내일이 드디어 마지막 수업이고 오늘까지는 클래스로 체스 만들기를 하고있다.
체스 만들기 전 배운 개념인 이차원 배열을 정리해보고자 한다.
행렬로 보지 않고, X축 Y축으로 생각하는 게 꽤 많이 헷갈렸다. (체스판에서 말 옮길 때 X좌표, Y좌표로 계산해야 한다고..)
- 아래 콘솔 이미지처럼 출력 하려면 어떻게 해야할까?
- 그리드 사이즈 =>
- 6*6
- SizeX = 6, SizeY = 6
- *출력 =>
- (i, j) 라고 했을 때
- j == 5일 때
- (0,5) (1,5) (2,5) (3,5) (4,5) (5,5)
- i++
- #출력 =>
- i가 0일 때 1
- (0,4) (0,3) (0,2) (0,1) (0,0)
- j--
- i == 0일 때 2
- (0,1) (0,2) (0,3) (0,4)
- j++
- j == 5일 때
- (4,5) (3,5) (2,5) (1,5) (0,5)
- i--
- i가 0일 때 1
- 공백 ' ' 출력 =>
- else
맨위에서 부터 아래로 출력되니까 Display함수는 아래와 같이 짰다.
Heap을 이용한 2차원배열 클래스를 아래와 같이 정리했다.
#include <iostream>
using namespace std;
class Grid2D // 힙 이용
{
public:
int SizeX;
int SizeY;
char **Grid;
static const int SIZE_X = 5;
static const int SIZE_Y = 5;
char Gird[SIZE_X][SIZE_Y];
public:
Grid2D() { ; }
Grid2D(int SizeX, int SizeY)
{
this->SizeX = SizeX;
this->SizeY = SizeY;
Grid = new char* [SizeX];
for (int i = 0; i < SizeX; i++)
{
Grid[i] = new char[SizeY];
}
for (int i = 0; i < SizeX; i++)
{
for (int j = 0; j < SizeY; j++)
{
// 행렬로 보지않고, X축 Y 축으로 생각하자
if (j == SizeY - 1)
{
Grid[i][j] = '*';
}
else if (i == 0 || j == 0 || i == SizeX - 1 )
{
Grid[i][j] = '#';
}
else
{
Grid[i][j] = ' ';
}
}
}
}
~Grid2D()
{
cout << "Grid2D가 소멸됩니다.\n";
for (int i = 0; i < SizeX; i++)
{
delete[] Grid[i];
}
delete[] Grid;
}
void Display()
{
for(int j = SizeY-1; j >= 0; j--)
{
for (int i = 0; i < SizeX; i++)
{
cout << Grid[i][j] << ' ';
}
cout << endl;
}
}
};
int main()
{
int X;
int Y;
cin >> X >> Y;
Grid2D* Grid = new Grid2D(X, Y);
Grid->Display();
delete Grid;
return 0;
}
'언어' 카테고리의 다른 글
[C++] rand() (0) | 2023.09.13 |
---|---|
[C++] cmath 라이브러리 (0) | 2023.09.13 |
[C++] find() / npos (0) | 2023.09.07 |
[c++] 헷갈리던 vector, 다시 공부 (0) | 2023.08.30 |
[C/CPP] 포인터 개념 (2) | 2023.03.17 |