📄문제
N개의 정수가 입력되면 당신은 입력된 값을 정렬해야 한다.
음의 정수는 앞쪽에 양의정수는 뒷쪽에 있어야 한다. 또한 양의정수와 음의정수의 순서에는 변함이 없어야 한다.
⬇️ 입력
첫 번째 줄에 정수 N(5<=N<=100)이 주어지고, 그 다음 줄부터 음수를 포함한 정수가 주어진다.
숫자 0은 입력되지 않는다.
8 1 2 3 -3 -2 5 6 -6 |
⬆️ 출력
정렬된 결과를 출력한다.
-3 -2 -6 1 2 3 5 6 |
📝 풀이
#include <iostream>
#include <vector>
void swap(int* a, int* b) noexcept
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int N;
scanf_s("%d", &N);
std::vector<int> arr(N);
for (int i = 0; i < N; ++i)
scanf_s("%d", &arr[i]);
for (int i = 0; i < N; ++i)
for (int j = 0; j < N - 1 - i; ++j)
if (arr[j] > arr[j + 1] && arr[j] * arr[j + 1] < 0)
swap(&arr[j], &arr[j + 1]);
for (int i = 0; i < N; ++i)
printf("%d ", arr[i]);
}
- 특수한 정렬 사례로, 음수와 양수인 경우에만 정렬을 수행합니다.
- 음수끼리, 정수끼리는 서로 정렬을 수행하지 않아야합니다.
- 인접한 원소끼리 음수와 양수를 비교하여 위치를 이동시키기 위해 버블 정렬을 사용하였습니다.
- 인접한 원소의 곱이 양수라면, 서로 부호가 같은 수 이기에 정렬을 하지 않습니다.
'algorithms (C++)' 카테고리의 다른 글
[C++] Inversion Sequence 🔥 (0) | 2023.10.15 |
---|---|
[C++] Least Recently Used (1) | 2023.10.15 |
[C++] 3등의 성적은? (0) | 2023.10.15 |
[C++] 삽입정렬 (1) | 2023.10.14 |
[C++] 버블정렬 (1) | 2023.10.14 |