입력받은 크기(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;
}
}
긴 코드를 입력하고 실행 시키면 결과가 이렇게 나옵니다.
물론 배열의 크기는 10의 이하인 정수를 입력하면 잘 출력되는 것 또한 직접 확인할 수 있습니다.
이번 문제는 이차원배열을 이용해서 배열이 어떻게 더해질지 생각하면 풀 수 있는 문제입니다.
#이 문제의 출처는 kw대학교 컴퓨터 정보공학부 2021년 1학기 객체지향 프로그래밍 과제 문제입니다.
1-5 반복되는 문자 압축 후, 압축된 수만큼 출력 (0) | 2021.07.08 |
---|---|
1-4 영어만 출력하고 대문자는 소문자로 바꾸기 (0) | 2021.07.08 |
1-3 난수 생성 후 오름차순 정렬 (0) | 2021.07.08 |
1-1 1부터 50까지 정수를 입력받아 그 수만큼 피보나치 합 구하기 (0) | 2021.07.05 |
과제 카테고리 (0) | 2021.07.05 |
댓글 영역