문제 출처: www.acmicpc.net/problem/2750
1. 코드
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int * arr;
int len, temp, i, j;
scanf("%d", &len);
arr = (int*) calloc(len, sizeof(int));
for(i = 0; i < len; i++)
scanf("%d", &arr[i]);
for(i = 0; i < len; i++)
for(j = i + 1; j <len; j++)
if(arr[i] > arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
for(i = 0; i < len; i++)
printf("%d\n", arr[i]);
free(arr);
return 0;
}
2. 문제 해결 방식
문제를 읽었을 때 N의 개수가 한정되어 있다. 하지만 나는 조금 유동적으로 입력이 가능하게 만들고 싶었다. 그래서 stdlib.h 헤더파일에 있는 calloc() 함수를 사용하여 동적할당을 충족시켰다. (calloc에 대해서)
int * arr;
int len, temp, i, j;
scanf("%d", &len);
arr = (int*) calloc(len, sizeof(int));
그리고 동적할당을 마친 배열에 수를 입력을 한다.
for(i = 0; i < len; i++)
scanf("%d", &arr[i]);
처음 입력된 순서대로 차례로 배열의 초기화가 되었을 텐데 이제 정렬을 해보려한다. 정렬은 2중 반복문을 사용하여 구성하였는데 매우 단순한 구조이다.
for(i = 0; i < len; i++)
for(j = i + 1; j <len; j++)
if(arr[i] > arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
이 배열이 돌아간다면 아래와 같이 실행이 된다.
순서 | 첫 번째 요소 | 두 번째 요소 | 세 번째 요소 | 네 번째 요소 | 다섯 번째 요소 |
1 | 5 | 4 | 3 | 2 | 1 |
2 | 4 | 5 | 3 | 2 | 1 |
3 | 3 | 5 | 4 | 2 | 1 |
4 | 2 | 5 | 4 | 3 | 1 |
5 | 1 | 5 | 4 | 3 | 2 |
6 | 1 | 4 | 5 | 3 | 2 |
7 | 1 | 3 | 5 | 4 | 2 |
8 | 1 | 2 | 5 | 4 | 3 |
9 | 1 | 2 | 4 | 5 | 3 |
10 | 1 | 2 | 3 | 5 | 4 |
11 | 1 | 2 | 3 | 4 | 5 |
다른 풀이 방법 : https://travelerfootprint.tistory.com/m/80(버블 정렬)
'컴퓨터 > 백준 알고리즘' 카테고리의 다른 글
백준 알고리즘 2751번: 수 정렬하기 2 C언어 합병 정렬(merge sort) (0) | 2020.05.31 |
---|---|
백준 알고리즘 2750번: 수 정렬하기 C언어(버블 정렬) (0) | 2020.05.23 |
백준 알고리즘 1001번 : A-B Java[자바] (0) | 2020.05.04 |
백준 알고리즘 7568번: 덩치 C언어 (0) | 2020.05.02 |
백준 알고리즘 1000번: A+B Java[자바] (0) | 2020.04.30 |