언어/c, c++
백준(BAEKJOOB) 2750번 수 정렬하기 문제 c언어
깡 딱
2023. 1. 8. 16:38
728x90
문제
N개의 수가 주어졌을 때, 이를 오름차순으로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
이 문제를 풀기 위해서는 알고리즘을 잘 알아야 하는데
(알고리즘은 문제를 해결하기 위한 일련의 순서적인 계산/풀이 절차/방법이다. )
저는 버블정렬로 풀어 보겠습니다.
(버블정렬은 인접한 두 수를 검사하여 정렬하는 알고리즘이다.)
scanf("%d", &cas);
for (i = 0; i < cas; i++) {
scanf("%d", &a[i]);
}
먼저 입력받을 케이스와 원소들을 입력받아주고
for (i = 0; i < cas; i++) {
for (j = i + 1; j < cas; j++) {
if (a[i] > a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
수를 비교할 수 있게 반복문을 준비하여 준다.
예를 들어 숫자가 2 1 이 입력받았다면
a [0] 번째 숫자 2와 a[1]번째 숫자 1과 비교를 하는것이다.
a[0]번째 숫자가 더 크기 때문에
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
a [0]은 1이 되고 a [1]은 2가 되는 것이다.
하지만 버블 정렬은 N(1 ≤ N ≤ 1,000)
이렇게 범위가 1000밖에 되지 않기 때문에
가능합니다 만약 범위가 큰 수를 주고
짧은 시간 안에 계산하라는
문제가 나온다면
이 알고리즘으로는 틀렸습니다.라고 나오게 되는 것이다.
총 코드
#include <stdio.h>
int main() {
int a[1000];
int cas;
int i, j;
int tmp;
scanf("%d", &cas);
for (i = 0; i < cas; i++) {
scanf("%d", &a[i]);
}
for (i = 0; i < cas; i++) {
for (j = i + 1; j < cas; j++) {
if (a[i] > a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
for (int i = 0; i < cas; i++) {
printf("%d ", a[i]);
}
}
728x90