๐งจ ๋ฌธ์ ์ถ์ฒ
๋ฌธ์ ์ถ์ฒ : ๋ฐฑ์ค 2752๋ฒ
๋ฌธ์ ๋์ด๋ : ๋ธ๋ก ์ฆ 4
๋ฌธ์ ๋งํฌ : www.acmicpc.net/problem/2752
2752๋ฒ: ์ธ์์ ๋ ฌ
์ซ์ ์ธ ๊ฐ๊ฐ ์ฃผ์ด์ง๋ค. ์ด ์ซ์๋ 1๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 1,000,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ์ด ์ซ์๋ ๋ชจ๋ ๋ค๋ฅด๋ค.
www.acmicpc.net
๐งจ ์๊ณ ๋ฆฌ์ฆ ์ ํ ๋ฐ C++ ์ฝ๋
์ธ ๊ฐ์ ์๋ฅผ ์ ๋ ฅํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ ๋ฌธ์ ๋ค. ์ฌ์ค์ N๊ฐ์ ์๋ฅผ ์ ๋ ฅํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ๋ ๊ฒ๊ณผ ๋ณ๋ฐ ๋ค๋ฅด์ง ์์ ๋ฌธ์ ์ธ๋ฐ ์ ๋ธ๋ก ์ฆ 4์ธ์ง๋ ์๋ฌธ์ด๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋ ๊ฐ๋จํ๊ฒ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด ๋ง์ ๊ฑฐ๋ค. ์ฌ์ค 3๊ฐ์ ์๋ผ๋ฉด ๋ณต์กํ๊ฒ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ์ง์ง ์๊ณ 2๋ฒ ๋๋ 3๋ฒ๋ง ๋น๊ตํด๋ ๋์ค์๋ฅผ ๊ฐ๋ ค๋ผ ์ ์๊ธด ํ๋ค. ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถํ๋ฉด์ ๊ตฌํํ๊ฑฐ๋ผ ๊ทธ๋ฅ ๋ณํฉ์ ๋ ฌ ์ด์ฉํด ํ์๋ค. ^^
#include <iostream>
#include <vector>
using namespace std;
/*
* ์ธ ์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
* merge sort (๋ณํฉ์ ๋ ฌ) ์ด์ฉํ ์ ๋ ฌ๋ฌธ์
*/
vector<int> merge(vector<int> a, vector<int> b) {
if (a.size() == 0)
return b;
if (b.size() == 0)
return a;
// ์ฌ๊ท์ ๋ณํฉ๊ณผ์
if (a[0] < b[0]) {
vector<int> target;
target.push_back(a[0]);
a.erase(a.begin());
vector<int> p = merge(a, b);
target.insert(end(target), begin(p), end(p));
return target;
}
else {
vector<int> target;
target.push_back(b[0]);
b.erase(b.begin());
vector<int> p = merge(a, b);
target.insert(end(target), begin(p), end(p));
return target;
}
}
vector<int> mergesort(vector<int> L) {
if (L.size() == 1) {
return L;
}
// ๋ถํ ์ง์ (mid) ์ ํด์ left, right๋ก split
int mid = L.size() / 2;
vector<int> left, right;
for (int i = 0; i < mid; i++) {
left.push_back(L[i]);
}
for (int i = mid; i < L.size(); i++) {
right.push_back(L[i]);
}
// left์ right vector ๊ฐ๊ฐ ์ ๋ ฌํด์ ๋ค์ ํฉ์น๊ธฐ
vector<int> result = merge(mergesort(left), mergesort(right));
return result;
}
int main(void) {
int n = 3;
vector<int> target(n);
for (int i = 0; i < n; i++) {
cin >> target[i];
}
// sort
vector<int> result = mergesort(target);
// output
for (int i = 0; i < n; i++) {
cout << result[i] << " ";
}
return 0;
}
๊ทธ๋ฅ ์ผ๋ฐ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๋ค๊ฐ ์ด๋ฐ ์ ๋ ฌ ๋ฌธ์ ํ๋ ค๊ณ ํ๋ฉด ๋ง์ด ๋นํฉํ์ ๊ฑฐ ๊ฐ๋ค. ์์ง c++ ๊ตฌํ๋ ์ต์์ง ์๊ณ ,,
c++ STL template๋ถํฐ ๋ง์คํฐํ๊ธฐ..
'Problem Solving > BOJ ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๊ธฐ๋ณธ๊ตฌํ๋ฌธ์ - 1550๋ฒ, 8393๋ฒ, 10869๋ฒ, 17256๋ฒ (C++ ์ฝ๋) (0) | 2021.01.07 |
---|---|
[BOJ] 11650๋ฒ - ์ขํ ์ ๋ ฌํ๊ธฐ (0) | 2021.01.07 |
[BOJ] 11651๋ฒ - ์ขํ ์ ๋ ฌํ๊ธฐ 2 (0) | 2021.01.06 |
[BOJ] 2751๋ฒ - ์ ์ ๋ ฌํ๊ธฐ 2 (0) | 2021.01.06 |
[BOJ] 2750๋ฒ - ์ ์ ๋ ฌํ๊ธฐ (0) | 2021.01.02 |