오늘은 좀 많이 쉬운 문제를 가지고 왔다. 정렬할 숫자 갯수(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 |
정렬문제가 두 개가 더 있는데 다음엔 이런 무식한 방법으루다가 말구~
다른 방식으로 풀이해보겠담~!
'백준' 카테고리의 다른 글
백준 알고리즘 2003 수들의 합2 (0) | 2019.02.22 |
---|---|
백준 알고리즘 10845번 큐 (0) | 2019.01.26 |
백준 알고리즘 1011번 Fly me to the Alpha Centauri (0) | 2019.01.26 |
백준 알고리즘 9012번 괄호 (0) | 2019.01.15 |
백준 알고리즘 1991번 트리순회 (0) | 2019.01.08 |