๐Ÿ“š ์ •๋ ฌ

์ •๋ ฌ(Sorting)์ด๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค
์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ณต์‹์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋œ๋‹ค

์ •๋ ฌ์—๋Š” ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ๊ณ„์ˆ˜ ์ •๋ ฌ ๋“ฑ๋“ฑ์ด ์žˆ๋‹ค


๐Ÿ“• ์„ ํƒ์ •๋ ฌ

๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„๋กœ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ ์ด์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ •

์ •๋ ฌ์—์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ค‘์š”ํ•œ๋ฐ ๋ฐ˜๋ณต๋ฌธ์˜ ์ค‘์ฒฉ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค
์„ ํƒ์ •๋ ฌ ๊ฐ™์€๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^2)์ด๋‹ค

#include <iostream>

using namespace std;

int n = 10;
int arr[10] = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};

int main()
{
    for (int i = 0; i < n; i++)
    {
        int min_index = i;
        for (int j = i + 1; j < n; j++)
        {
            if (arr[min_index] > arr[j])
                min_index = j;
        }
        swap(arr[i], arr[min_index]);
    }
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    return 0;
}

๐Ÿ“˜ ์‚ฝ์ž… ์ •๋ ฌ

์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ณจ๋ผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…ํ•œ๋‹ค
์„ ํƒ ์ •๋ ฌ์— ๋น„ํ•ด ํšจ์œจ์ 

์„ ํƒ์ •๋ ฌ๊ณผ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๊ฐ™์ง€๋งŒ ๋ฐฐ์—ด์ด ๊ฑฐ์˜ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋‹ค๋ฉด ์„ ํƒ์ •๋ ฌ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค

#include <iostream>

using namespace std;

int n = 10;
int arr[10] = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};

int main()
{
    for (int i = 1; i < n; i++)
    {
        for (int j = i; j > 0; j--)
        {
            if (arr[j] < arr[j - 1])
                swap(arr[j], arr[j - 1]);
            else
                break;
        }
    }
    for(int i = 0; i < n; i++)
        cout << arr[i] << ' ';
    return 0;
}

๐Ÿ“™ ํ€ต ์ •๋ ฌ

๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•
์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค
๋ณ‘ํ•ฉ ์ •๋ ฌ๊ณผ ๋”๋ถˆ์–ด ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค
๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ€ต ์ •๋ ฌ์€ ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ(Pivot)๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค


๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜๊ณ  ์™ผ์ชฝ์—์„œ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ ์„ ํƒํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ์—์„œ ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•œ ํ›„์— ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค ๊ณ„์†๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๋‘ ๊ฐ’์ด ์—‡๊ฐˆ๋ฆฐ ๊ฒฝ์šฐ์— ํ”ผ๋ฒ—์˜ ์œ„์น˜๋ฅผ ์ž‘์€ ๋ฐ์ดํ„ฐ์™€ ํ”ผ๋ฒ—์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ถ„ํ• ํ•œ ํ›„ ์ƒˆ๋กœ์šด ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜๊ณ  ๋ฐ˜๋ณตํ•œ๋‹ค
์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(NlogN)์ด์ง€๋งŒ ์ตœ์•…์˜๊ฒฝ์šฐ O(N^2)๊ฐ€ ๋‚˜์˜ค๊ธฐ๋„ ํ•œ๋‹ค

#include <iostream>

using namespace std;

int n = 10;
int arr[10] = {7, 5, 9, 0, 3, 1, 6, 2, 4, 8};

void quickSort(int* arr, int start, int end)
{
    if (start >= end)
    	return; 
    int pivot = start;
    int left = start + 1;
    int right = end;
    while (left <= right)
    {
        while (left <= end && arr[left] <= arr[pivot])
            left++;
        while (right > start && arr[right] >= arr[pivot])
            right--;
        if (left > right)
            swap(arr[pivot], arr[right]);
        else
            swap(arr[left], arr[right]);
    }
    quickSort(arr, start, right - 1);
    quickSort(arr, right + 1, end);
}

int main()
{
    quickSort(arr, 0, n - 1);
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
}

์ฝ”๋“œ๋Š” ์‹œ์ž‘์ง€์ ๊ณผ ๋์ง€์  ๋‘๊ฐœ๋ฅผ ์ง€์ •ํ•ด๋‘๊ณ  ์ •๋ ฌํ•œ๋‹ค


๐Ÿ“— ๊ณ„์ˆ˜ ์ •๋ ฌ

ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค
๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด ์ •์ˆ˜ ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ N, ๋ฐ์ดํ„ฐ(์–‘์ˆ˜) ์ค‘ ์ตœ๋Œ“๊ฐ’์ด K์ผ ๋•Œ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์ˆ˜ํ–‰์‹œ๊ฐ„ O(N+K)๋ฅผ ๋ณด์žฅํ•œ๋‹ค

๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋‹ด์„์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ๊ฐ ์ธ๋ฑ์Šค์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ช‡๋ฒˆ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ์ €์žฅํ•ด๋†“๊ณ  ์ถœ๋ ฅํ•œ๋‹ค

#include <iostream>
#define MAX_VALUE 9

using namespace std;

int n = 15;
int arr[15] = {7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2};
int cnt[MAX_VALUE + 1];

int main()
{
    for (int i = 0; i < n; i++)
    	cnt[arr[i]] += 1;
    for (int i = 0; i <= MAX_VALUE; i++)
    {
        for (int j = 0; j < cnt[i]; j++)
            cout << i << ' ';
    }
}

๐Ÿ“„ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น„๊ต


๐Ÿ“š ์˜ˆ์ œ

๐Ÿ“•์œ„์—์„œ ์•„๋ž˜๋กœ

์ˆ˜์—ด์„ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ์‹œ์˜ค

#include <iostream>
#include <algorithm>

using namespace std;

int arr[501];

bool compare(int a, int b)
{
    return a > b;
}

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i++)
        cin >> arr[i];
    sort(arr, arr + n, compare);
    for (int i = 0; i < n; i++)\
        cout << arr[i] << " ";
    return 0;
}

๋‹จ์ˆœํ•˜๊ฒŒ ๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๊ณ  ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์˜€๋‹ค ๋น„๊ต๋ฅผ์œ„ํ•ด compare ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.


๐Ÿ“˜ ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋กœ ํ•™์ƒ ์ถœ๋ ฅํ•˜๊ธฐ

N๋ช…์˜ ํ•™์ƒ์˜ ์ด๋ฆ„๊ณผ ์„ฑ์  ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋Œ€๋กœ ํ•™์ƒ์˜ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜๋ผ

์˜ˆ์ „์— ๋ฐฑ์ค€์—์„œ ํ‘ผ ๋ฌธ์ œ๊ฐ€ ๋˜‘๊ฐ™์•„์„œ ์‰ฝ๊ฒŒ ํ’€์—ˆ๋‹ค pair๋ฅผ ์ด์šฉํ•ด์„œ string, int ํ˜•์œผ๋กœ ๋ฐ›๊ณ  ๋น„๊ต๋ฅผ ํ•œ ํ›„ ์ถœ๋ ฅํ•ด์ฃผ์—ˆ๋‹ค ์•ˆ์ •์ •๋ ฌ์€ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์˜ค๋Š”๊ฑธ ๋งํ•œ๋‹ค
์ฐธ๊ณ ๋ฌธ์ œ
10814 ๋‚˜์ด์ˆœ์ •๋ ฌ

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

bool comp(pair<string, int> x, pair<string, int> y)
{
    return x.second < y.second;
}

int N;
vector<pair<string, int>> v;

int main()
{
    cin >> N;
    for (int i = 0; i < N; i++)
    {
        string a;
        int b;
        cin >> a >> b;
        v.push_back({a, b});
    }
    stable_sort(v.begin(), v.end(),comp);

    for(auto c : v)
        cout << c.first << " ";
}

๐Ÿ“™ ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ต์ฒด

๋™๋นˆ์ด๋Š” ๋‘๊ฐœ์˜ ๋ฐฐ์—ด A์™€ B๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค ๋‘ ๋ฐฐ์—ด์€ N๊ฐœ์˜ ์›์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฐฐ์—ด์˜ ์›์†Œ๋Š” ๋ชจ๋‘ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋™๋นˆ์ด๋Š” ์ตœ๋Œ€ K๋ฒˆ์˜ ๋ฐ”๊ฟ”์น˜๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฐ”๊ฟ”์น˜๊ธฐ ์—ฐ์‚ฐ์ด๋ž€ ๋ฐฐ์—ด A์— ์žˆ๋Š” ์›์†Œ ํ•˜๋‚˜์™€ ๋ฐฐ์—ด B์— ์žˆ๋Š” ์›์†Œ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ ๋‘ ์›์†Œ๋ฅผ ์„œ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๋™๋นˆ์ด์˜ ์ตœ์ข… ๋ชฉํ‘œ๋Š” ๋ฐฐ์—ด A์˜ ๋ชจ๋“  ์›์†Œ์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

๋‘๊ฐœ์˜ ๋ฐฐ์—ด์„ ๊ฐ๊ฐ ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•˜๊ณ  ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํ™•์ธํ•˜๊ณ  A์˜ ์›์†Œ๊ฐ€ B์˜ ์›์†Œ๋ณด๋‹ค ์ž‘์„๊ฒฝ์šฐ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;


vector<int> a, b;

bool compare(int x, int y)
{
    return x > y;
}

int main()
{
    int n, k;
    cin >> n >> k;
    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        a.push_back(x);
    }

    for (int i = 0; i < n; i++)
    {
        int x;
        cin >> x;
        b.push_back(x);
    }
    sort(a.begin(), a.end());
    sort(b.begin(), b.end(), compare);
 
    for (int i = 0; i < k; i++)
    {
        if (a[i] < b[i])
            swap(a[i], b[i]); 
        else
            break;
    }
    long long result = 0;
    for (int i = 0; i < n; i++)
        result += a[i];
    cout << result << "\n";
}

โž• 3273 ๋‘ ์ˆ˜์˜ ํ•ฉ

n๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์–‘์˜ ์ •์ˆ˜ a1, a2, ..., an์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์žˆ๋‹ค. ai์˜ ๊ฐ’์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1000000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์ž์—ฐ์ˆ˜ x๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ai + aj = x (1 โ‰ค i < j โ‰ค n)์„ ๋งŒ์กฑํ•˜๋Š” (ai, aj)์Œ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ฒ˜์Œ ์ƒ๊ฐ์œผ๋กœ๋Š” ์ •๋ ฌํ•œ ํ›„ ๋‘ ์ˆ˜๋ฅผ ์ด์ค‘๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๋Œ๋ ค๊ฐ€๋ฉด์„œ ๋”ํ•ด๋ณด๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์ธํ„ฐ๋„ท์— ์ฐพ์•„๋ณด๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚œ๋‹ค๊ณ  ๋‚˜์™€์žˆ์–ด์„œ ์ข€ ํŠน์ดํ•œ ์ฝ”๋“œ๊ฐ€ ์žˆ๊ธธ๋ž˜ ์ฐธ๊ณ ํ•ด๋ณด์•˜๋‹ค

#include <iostream>

using namespace std;

int num[2000001];

int main()
{
    int n, a, b;
    int cnt = 0;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> a;
        num[a]++;
    }
    cin >> b;
    for (int i = 0; i < (b + 1)/2; i++)
    {
        if (num[i] == 1 && num[b - i] == 1)
            cnt++;
    }
    cout << cnt << endl;
}

์ด๋Ÿฐ์‹์œผ๋กœ ํ’€๋ฉด ์• ์ดˆ์— ์ •๋ ฌ์„ ํ•  ํ•„์š”๋„ ์—†์–ด์ง€๊ณ  ๋‹จ์ˆœํžˆ ์ธ๋ฑ์Šค๋งŒ ์ฐธ์กฐํ•˜์—ฌ์„œ ํ’€ ์ˆ˜ ์žˆ์–ด์„œ ์ข€๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ธ๊ฑฐ ๊ฐ™๋‹ค

profile
์—ด์‹ฌํžˆ์‚ด์ž

0๊ฐœ์˜ ๋Œ“๊ธ€