중복, 역순 배열 and..

Erdos·2024년 11월 17일
0

잡담

목록 보기
6/6

1. python 코드


lst = [4,3,2,1,1,3,4,5]

def solution(lst):
    unique_lst = list(set(lst))  
    unique_lst.sort(reverse=True) 
    return unique_lst

print(solution(lst))  

2. C코드

#include <stdio.h>

int is_duplicate(int *temp, int k, int value) 
// k = 검사할 요소의 갯수, value = 중복여부를 확인할 값
{
	int j;

	j = 0;
	while (j < k)
	{
		if (temp[j] == value) // 동일한 값 발견, 탐색 종료
			return (1);
		j++;
	}
	return (0);
}

void remove_duplicate(int *arr, int *size)
{
	int i = 0;
	int k = 0;
	int temp[*size]; // 중복이 제거된 값을 임시로 저장하는 배열

	while (i < *size)
	{
		if (!is_duplicate(temp, k, arr[i]))
			temp[k++] = arr[i];
		i++;
	}
	i = 0;
	while (i < k) # 출력
	{
		arr[i] = temp[i];
		i++;
	}
	*size = k; // 중복이 제거된 배열의 요소 갯수
}

void sort_descending(int *arr, int size)
{
	int i;
	int swapped;
	int temp;

	swapped = 1;
	while (swapped)
	{
		swapped = 0;
		i = 0;
		while (i < size - 1)
		{
			if (arr[i] < arr[i + 1])
			{
				temp = arr[i];
				arr[i] = arr[i + 1];
				arr[i + 1] = temp;
				swapped = 1;
			}
			i++;
		}
	}
}

void print_array(int *arr, int size)
{
	int i;

	i = 0;
	while (i < size)
	{
		printf("%d", arr[i]);
		if (i < size - 1)
			printf(" ");
		i++;
	}
	printf("\n");
}

int main(void)
{
	int arr[] = {4,3,2,1,1,3,4,5};
	int size = sizeof(arr) / sizeof(arr[0]);

	remove_duplicate(arr, &size);
	sort_descending(arr, size);
	print_array(arr, size);
	return (0);
}

❓❓❓❓❓❓❓❓ 너무 차이나는 거 아니요?

3. qsort 함수 사용하기

  • <stdlib.h>
#include <stdio.h>
#include <stdlib.h>``

int compare_desc(const void *a, const void *b)
{
	return *(int *)b - *(int *)a;
}

void remove_duplicate_and_sort(int *arr, int *size)
{
	qsort(arr, *size, sizeof(int), compare_desc); // 시간 복잡도 개선, 코드도 줄고

	int j = 0;
	int i = 1;
	while (i < *size)
	{
		if (arr[j] != arr[i])
		{
			j++;
			arr[j] = arr[i];
		}
		i++;
	}
	*size = j + 1;
}

void print_array(int *arr, int size)
{
	int i;

	i = 0;
	while (i < size)
	{
		printf("%d", arr[i]);
		if (i < size - 1)
			printf(" ");
		i++;
	}
	printf("\n");
}
int main(void)
{
	int arr[] = {4,3,2,1,1,3,4,5};
	int size = sizeof(arr) / sizeof(arr[0]);

	remove_duplicate_and_sort(arr, &size);
	print_array(arr, size);
	return (0);
}
profile
수학을 사랑하는 애독자📚 Stop dreaming. Start living. - 'The Secret Life of Walter Mitty'

0개의 댓글