본문 바로가기
언어

[C++] 2차원 배열을 X좌표 Y좌표로 생각하기!

by 송파감자 2023. 3. 24.

국비지원으로 에티버스러닝에서 수업을 들은지도 이제 한달이 되었다. 한달의 절반을 C++수업을 듣고 있는데, 내일이 드디어 마지막 수업이고 오늘까지는 클래스로 체스 만들기를 하고있다.

 

체스 만들기 전 배운 개념인 이차원 배열을 정리해보고자 한다.

행렬로 보지 않고, X축 Y축으로 생각하는 게 꽤 많이 헷갈렸다. (체스판에서 말 옮길 때 X좌표, Y좌표로 계산해야 한다고..)

 

  1. 아래 콘솔 이미지처럼 출력 하려면 어떻게 해야할까?

정사각형 테두리를 치는데, 맨위만 *로 출력하기!
헷갈릴 땐 그려보는 게 제 맛!

  • 그리드 사이즈  => 
    • 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--
  • 공백 ' ' 출력 =>
    • 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