๐Ÿ“• Algorithm

C++ STL - ๋ฒกํ„ฐ ๋ผ๋ฆฌ ์—ฐ์‚ฐ (ํ•ฉ์ง‘ํ•ฉ, ์ฐจ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ, ํ•ฉ๋ณ‘)

ํ•œ์ฝ”๋”ฉ 2020. 12. 18. 22:30
728x90
728x90

ํ•ฉ์ง‘ํ•ฉ : merge() / set_union()

๋‘ ๋ฒกํ„ฐ๋ฅผ ๋ถ™ํžŒ๋‹ค.  ๋‘ ํ•จ์ˆ˜์˜ ์ฐจ์ด์ ์ด ์žˆ๋‹ค. merge()๋Š” ์ค‘๋ณต ํ—ˆ์šฉ, set_union()์€ ์ค‘๋ณต ์ œ๊ฑฐ

 

Iterator iter ๋ณ€์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ฒฐ๊ณผ์˜ ๋์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค.

๊ทธ iter์—์„œ ๋ฒกํ„ฐ์˜ ์‹œ์ž‘์ ์„ ๋นผ์„œ ๊ฐ’์ด ๋ช‡ ๊ฐœ์ธ์ง€ ์•Œ์•„๋‚ด์„œ ๊ทธ ๊ฐ’์œผ๋กœ resize() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฒกํ„ฐ ํฌ๊ธฐ ์กฐ์ ˆ ํ›„ ์ˆœํšŒ

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

using namespace std;

int main(){

  // ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋œ ํ›„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  vector<int> a = {1, 2, 3, 4, 5};
  vector<int> b = {5, 6, 7, 8, 9};
  vector<int> result1(10);
  vector<int> result2(10);
  vector<int>::iterator iter;
  
  // sort(a.begin(), a.end());
  // sort(b.begin(), b.end());
  
  // ๋จธ์ง€ - [1, 2, 3, 4, 5, 5, 6, 7, 8, 9]
  merge(a, a+5, b, b+5, result1.begin());
  
  // ํ•ฉ์ง‘ํ•ฉ (A ∪ B) - [1, 2, 3, 4, 5, 6, 7, 8, 9]
  iter = set_union(a, a+5, b, b+5, result2.begin());
  result2.resize(iter - result2.begin());

  return 0;
}

 

์ฐจ์ง‘ํ•ฉ, ๊ต์ง‘ํ•ฉ, ๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ : set_difference(), set_intersection(), set_symmetric_difference()

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

using namespace std;

int main(){

  // ๋ฐ˜๋“œ์‹œ ์ •๋ ฌ๋œ ํ›„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  vector<int> a = {1, 2, 3, 4, 5};
  vector<int> b = {5, 6, 7, 8, 9};
  vector<int> result1(10);
  vector<int> result2(10);
  vector<int> result3(10);
  vector<int> result4(10);
  vector<int>::iterator iter;
  
  // sort(a.begin(), a.end());
  // sort(b.begin(), b.end());
  
  // ์ฐจ์ง‘ํ•ฉ (A - B) - [1, 2, 3, 4]
  iter = set_difference(a, a+5, b, b+5, result1.begin());
  result1.resize(iter - result1.begin());
  
  // ์ฐจ์ง‘ํ•ฉ (B - A) - [6, 7, 8, 9]
  iter = set_difference(b, b+5, a, a+5, result2.begin());
  result2.resize(iter - result2.begin());
  
  // ๊ต์ง‘ํ•ฉ (A ∩ B) - [5]
  iter = set_intersection(a, a+5, b, b+5, result3.begin());
  result3.resize(iter - result3.begin());
  
  // ๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ (A โ–ณ B) - [1, 2, 3, 4, 6, 7, 8, 9] (๊ต์ง‘ํ•ฉ์„ ์ œ์™ธํ•˜๋Š” ๋Š๋‚Œ)
  iter = set_symmetric_difference(a, a+5, b, b+5, result4.begin());
  result4.resize(iter - result4.begin());
  
  return 0;
}
728x90
๋ฐ˜์‘ํ˜•