입력받은 크기(1~10)의 제곱 크기의 2차원 배열을 만들고, 안에 수를 난수로(1~99) 채웁니다.
그 후에 각 배열의 값을 오름차순으로 정렬시키는 문제입니다.
#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
int main()
{
int size;
int save;
cout<<"Array Size(0<N<11) : ";
cin >> size;
int** arr;
int* sortarr;
arr = (int**)malloc(sizeof(int*) * size);
for (int i = 0; i < size; i++)
{
*(arr + i) = (int*)malloc(sizeof(int*) * size);
}
srand((unsigned int)time(NULL));
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
arr[i][j] = rand() % 99 + 1;
for (int h = 0; h < j; h++)
{
if (arr[i][j] == arr[i][h]) {
j--;
break;
}
}
}
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout<<arr[i][j]<<"\t";
}
printf("\n");
}
cout << "\n" << endl;
sortarr = (int*)malloc(sizeof(int*) * (size * size));
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
sortarr[i * size + j] = arr[i][j];
}
}
for (int i = 0; i < size*size-1; i++)
{
for (int j = 0; j < size*size-1 - i; j++)
{
if (sortarr[j] > sortarr[j + 1])
{
save = sortarr[j];
sortarr[j] = sortarr[j + 1];
sortarr[j + 1] = save;
}
}
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
arr[i][j] = sortarr[i * size + j];
}
}
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
cout<<arr[i][j]<<"\t";
}
cout<<"\n";
}
for (int i = 0; i << size; i++)
{
free(*(arr + i));
}
free(arr);
free(sortarr);
return 0;
}
제가 이 과제를 할 때는 c++ 방식으로 메모리 할당 및 해제를 배우지 않을 상태여서
new delete가 아닌 malloc과 free를 사용한 점 양해 부탁드립니다.
처음에는 입력받은 수 제곱만큼의 2차원 배열을 할당 및 생성을 하고, 프로그램을 돌릴 때마다 다른 값을 받기 위해 srand time을 사용했습니다.
이번 코드를 작성하면서 아쉬운 점이 있다면, 2차원 배열에서 한 번에 정리하는 법을 알지 못해서, 1차원 배열로 값을 넘겨준 다음에 많은 정렬들 중에서 쉽고 간단한 버블 정렬을 이용한 후, 다시 2차원 배열로 넘겨주었습니다.
(버블 정렬은 구현하기 쉽지만, 알고리즘적으로 봤을 때는 효율적이지는 않습니다.)
2차원 배열로 한 번에 정리하는 법이 있다면 다시 글을 올리겠습니다.
#이 문제의 출처는 kw대학교 컴퓨터 정보공학부 2021년 1학기 객체지향 프로그래밍 과제 문제입니다.
1-5 반복되는 문자 압축 후, 압축된 수만큼 출력 (0) | 2021.07.08 |
---|---|
1-4 영어만 출력하고 대문자는 소문자로 바꾸기 (0) | 2021.07.08 |
1-2 방향을 입력받고 해당 방향으로 더하는 배열 (0) | 2021.07.08 |
1-1 1부터 50까지 정수를 입력받아 그 수만큼 피보나치 합 구하기 (0) | 2021.07.05 |
과제 카테고리 (0) | 2021.07.05 |
댓글 영역