상세 컨텐츠

본문 제목

1-2 방향을 입력받고 해당 방향으로 더하는 배열

과제

by 근성 2021. 7. 8. 09:08

본문

 

입력받은 크기(1~9)의 배열(초기값 : 1)을 만들고, 방향을 입력받아 그 방향으로 더하는 프로그램입니다.

프로그램의 순서는 1. 배열 크기 입력 2. 배열 값을 1로 채우기 3. 방향 입력받기 4. 입력한 방향으로 더하기로 생각했습니다.

 

저는 이 문제를 풀 당시에는 좋은 방법이 떠오르지않아, 막일이라고 생각하고 문제에 접근해서 소스코드가 긴 것을 볼 수 있습니다.

 

#include<iostream>
#define MAX_ARRAY_SIZE 9 //배열크기 선언

using namespace std;

int main()
{
	int num;
	int direction;
	printf("Array Size(0<N<10) :");
	cin >> num; //배열크기 입력

	int arr[MAX_ARRAY_SIZE][MAX_ARRAY_SIZE];
	for (int i = 0; i < num; i++)
	{
		for (int j = 0; j < num; j++)
		{
			*(*(arr + i) + j) = 1;//배열 초기값 선언
		}
	}

	for (int i = 0; i < num; i++)
	{
		for (int j = 0; j < num; j++)
		{
			cout << arr[i][j] << " "; //배열 초기값 보여주기
		}
		cout << "\n";
	}

	cout<<"\nShift All Direction:";
	cin >> direction;//방향 입력받기

	switch (direction)//방향에 따라
	{
	case 0: //방향으로 0을 입력받은경우

		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num - 1; j++)
			{
				*(*(arr + (num - (2 + j))) + i) += *(*(arr + (num - (1 + j))) + i);
				*(*(arr + (num - (1 + j))) + i) = 0;
			}
		}
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				cout << arr[i][j] << " ";
			}
			cout << "\n";
		}
		break;

	case 1: //방향으로 1을 입력받은경우
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num - 1; j++)
			{
				*(*(arr + (j + 1)) + i) += *(*(arr + j) + i);
				*(*(arr + j) + i) = 0;
			}
		}
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				cout << arr[i][j] << " ";
			}
			cout << "\n";
		}
		break;
	case 2://방향으로 2를 입력받은경우
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num - 1; j++)
			{
				*(*(arr + i) + (j + 1)) += *(*(arr + i) + j);
				*(*(arr + i) + j) = 0;
			}
		}
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				cout << arr[i][j] << " ";
			}
			cout << "\n";
		}
		break;
	case 3://방향으로 3을 입력받은경우
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num - 1; j++)
			{
				*(*(arr + i) + (num - (j + 2))) += *(*(arr + i) + (num - (j + 1)));
				*(*(arr + i) + (num - (j + 1))) = 0;
			}
		}
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				cout << arr[i][j] << " ";
			}
			cout << "\n";
		}
		break;
	case 4://방향으로 4를 입력받은경우
		for (int i = 1; i < num; i++)
		{
			arr[i][0] += arr[i - 1][0];
		}
		for (int i = 1; i < num; i++)
		{
			arr[num - 1][i] = arr[num - 1][i - 1] - 1;
		}
		for (int i = 0; i < num - 1; i++)
		{
			for (int j = 1; j < num; j++)
			{
				arr[i][j] = 0;
			}
		}
		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				cout << arr[i][j] << " ";
			}
			cout << "\n";
		}
		break;
	case 5://방향으로 5를 입력받은경우
		for (int i = 1; i < num; i++)
		{
			arr[0][i] += arr[0][i - 1];
		}
		for (int i = 1; i < num; i++)
		{
			arr[i][num - 1] = arr[i - 1][num - 1] - 1;
		}
		for (int i = 1; i < num; i++)
		{
			for (int j = 0; j < num - 1; j++)
			{
				arr[i][j] = 0;
			}
		}

		for (int i = 0; i < num; i++)
		{
			for (int j = 0; j < num; j++)
			{
				cout << arr[i][j] << " ";
			}
			cout << "\n";
		}
		break;
	}
}

 

긴 코드를 입력하고 실행 시키면 결과가 이렇게 나옵니다.

배열 크기를 3으로 줬을때, 모든 방향

 

물론 배열의 크기는 10의 이하인 정수를 입력하면 잘 출력되는 것 또한 직접 확인할 수 있습니다.

 

이번 문제는 이차원배열을 이용해서 배열이 어떻게 더해질지 생각하면 풀 수 있는 문제입니다.

 

#이 문제의 출처는 kw대학교 컴퓨터 정보공학부 2021년 1학기 객체지향 프로그래밍 과제 문제입니다.

 

관련글 더보기

댓글 영역