오늘은 좀 많이 쉬운 문제를 가지고 왔다. 정렬할 숫자 갯수(n)를 먼저 입력 받고 그 다음 숫자를 무작위로 n개 만큼 입력 받은 후 그 숫자들을 오름차순으로 정렬하는 문제이다!


n개의 숫자들은 배열에 입력 받아 저장하였다.

그 배열은 크기를 알 수 없기 때문에 동적할당을 해주었당.

malloc을 사용하는게 좋을 것 같아서 일부러 자주 사용하려고 노력하는 편이다...

내가 잘 알고 그런건 아니지만 무조건 arr[1000]이런식으로 해 주는 것 보다는 동적할당을 통해서 크기를 먼저 할당해주고 나중에 해제하는 방식이 나은 것 같아서 일부러 신경써서 더 사용해 주려고 한다(이게 맞는 건지는 잘 모르겠지만 ㅎ)


여튼 알고리즘은

0번 부터 n-2번째까지 n-1번을 반복을 하는데, 무엇을 반복하느냐하면,

1번 부터 n-1번째(배열의 맨 마지막) 저장 된 숫자를 비교한다.

아래 그림과 같이 하면 된다!

아래 그림이 0번째부터 n-2번까지 반복하는 것 중 한 번(분홍색 한 번)을 완료한 것이다.


다시 말해 0번 인덱스1번부터 n-1번까지의 인덱스와 비교 한다.

다음은 1번 인덱스2번부터 n-1번까지의 인덱스와 비교한다.

그 다음은 2번 인덱스3번부터 n-1번까지의 인덱스와 비교한다.


이렇게 반복해서 마지막으로

n-2번 인덱스n-1번 인덱스와 비교한다.


비효율적이다.

비효율적이지만 코드는 쉽다.

여튼 나는 이렇게 무식한 알고리즘으로 풀었다ㅋㅎㅋㅎ


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int n;
    scanf("%d"&n);
    int *arr=(int*)malloc(n*sizeof(int)); 
    for (int i = 0; i < n; i++)
        scanf("%d"&arr[i]);
    for (int i = 0; i < n-1; i++) {
        for (int j = i + 1; j < n; j++)
            if (arr[i] > arr[j]) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
    }
    for (int i = 0; i < n; i++)
        printf("%d\n", arr[i]);
    free(arr);
}
cs


정렬문제가 두 개가 더 있는데 다음엔 이런 무식한 방법으루다가 말구~

다른 방식으로 풀이해보겠담~!

+ Recent posts