본문 바로가기

알고리즘 공부 및 문제 풀이/백준(BOJ)

[c++] 백준 2750 수 정렬하기

백준 단계별로 풀어보기 [정렬] 수 정렬하기

https://www.acmicpc.net/problem/2750

 

2750번: 수 정렬하기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 숫자가 주어진다. 이 수는 절댓값이 1,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.

www.acmicpc.net

 

[풀이]

선택정렬을 사용하여 풀이하였다.

선택정렬은 첫번째 값을 그 다음 값부터 마지막 값까지 차례로 비교하여 가장 작은 값이 맨 앞에 오도록 swap해주는 방식을 반복하며 정렬을 수행한다. 

 

[코드]

#include <iostream>
#define SWAP(x, y, z) ((z)=(x), (x=y), (y=z))

int main() {
    int num, least, temp=0;
    std::cin >> num;
    int* arr = new int[num];
    for (int i = 0; i < num; i++)
        std::cin >> arr[i];

    for(int i = 0; i < num-1; i++) {
        least = i;
        for (int j = i + 1; j < num; j++) {
            if (arr[j] < arr[least]) least = j;
        }
        SWAP(arr[i], arr[least], temp);
    }

    for (int i = 0; i < num; i++)
        std::cout << arr[i] << std::endl;

}