4번 문제

✔︎ 미션 4 (난이도 : 상)

1. 미션 제목

중복 빼고 정렬하기

2. 지시문

N개의 정수가 주어진다. 이때, N개의 정수를 오름차순으로 정렬하는 프로그램을 작성하시오. 같은 정수는 한번만 출력한다.

3. 핵심 개념

#정렬 #중복 #빅오표기법 #big O notation

4. 부가 설명


😎 제출 답안

#include <stdio.h>
#include <stdlib.h>
void init_array(int* arr, int arr_size);
void print_array(int* arr, int arr_size);
void deduplicate_array(int* arr, int *arr_size);
int is_include(int *arr, int arr_size, int value);
void sort(int* arr, int arr_size);
int main(void){
int arr_size;
scanf("%d", &arr_size); // 배열 크기를 묻는다
int arr[arr_size];
init_array(arr, arr_size); // 배열 초기화
deduplicate_array(arr, &arr_size); // 배열 중복 제거
sort(arr, arr_size); // 배열 정렬
print_array(arr, arr_size); // 배열 출력
return 0;
}
void init_array(int* arr, int arr_size) {
for(int i = 0; i < arr_size; i++) {
scanf("%d", &arr[i]);
}
}
void print_array(int* arr, int arr_size){
for(int i = 0; i < arr_size; i++)
printf("%d ", arr[i]);
printf("\n");
}
void deduplicate_array(int* arr, int *arr_size){
int* temp = malloc(sizeof(int) * *arr_size);
int count = 0;
for(int i = 0; i < *arr_size; i++) {
if(is_include(temp, count, arr[i]) == 0) {
temp[count++] = arr[i];
} // 만약 temp가 arr의 값을 가지고 있지 않다면 추가
}
for(int j = 0; j < count; j++) {
arr[j] = temp[j];
} // arr에 temp 값을 복사
*arr_size = count; // 배열 뒷부분은 버리기 위해
free(temp);
}
int is_include(int *arr, int arr_size, int value) {
for(int i = 0; i < arr_size; i++) {
if(arr[i] == value) {
return 1;
}
}
return 0;
}
void sort(int* arr, int arr_size){
int temp;
int count = 0;
for(int i = 0; i < arr_size; i++) {
count = 0;
for(int j = 0; j < arr_size - 1; j++) {
if(*(arr + j) > *(arr + j + 1)){
temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
count++;
}
}
if(count == 0) break;
}
}