백준 알고리즘 풀이
백준 2750 (수 정렬하기)
lee0410
2022. 1. 26. 19:08
수 정렬하기 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 128 MB | 108598 | 61833 | 42631 | 58.328% |
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
출력
첫째 줄부터 N개의 줄에 오름차순으로 정렬한 결과를 한 줄에 하나씩 출력한다.
예제 입력 1 복사
5
5
2
3
4
1
예제 출력 1 복사
1
2
3
4
5
<코드 1>
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAX 1000
int main(void)
{
int N, temp;
scanf("%d", &N);
int arr[MAX];
for (int i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
for (int i = 0; i < N; i++)
for(int j=0; j<N-1; j++)
if (arr[j + 1] < arr[j])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
for (int i = 0; i < N; i++)
printf("%d\n", arr[i]);
return 0;
}
코드<2>
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAX 1000
void swap(int* a, int* b);
int main(void)
{
int N;
scanf("%d", &N);
int arr[MAX] = { 0 };
for (int i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
for (int i = 0; i < N; i++)
{
int j = i;
for (int k = i+1; k < N; k++)
{
if (arr[k] < arr[j])
j = k;
}
swap(&arr[i], &arr[j]);
}
for (int i = 0; i < N; i++)
{
printf("%d\n", arr[i]);
}
return 0;
}
void swap(int* a, int* b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
<풀이>
코드1은 버블정렬(서로 인접한 두 원소를 검사하여 정렬하는 알고리즘을 이용한 방법이다.
버블정렬을 통해 배열에 저장 된 7, 4, 5, 1, 3을 오름차순으로 정렬하는 방법은 다음 그림과 같다.
코드2는 선택정렬을 이용한 방법이다. 선택 정렬은 첫 번째 자료를 두 번째 자료부터 마지막 자료까지 차례대로 비교하여 가장 작은 값을 찾아 첫 번째에 놓고, 두 번째 자료를 세 번째 자료부터 마지막 자료까지와 차례대로 비교하여 그 중 가장 작은 값을 찾아 두 번째 위치에 놓는 과정을 반복하며 정렬을 수행한다.
선택정렬을 통해 배열에 저장 된 9, 6, 7, 3, 5를 오름차순으로 정렬하는 방법은 다음 그림과 같다.