๐Ÿ’ฏ์ฑŒ๋ฆฐ์ง€๋ฐ˜ ๋ณต์Šต ๋…ธํŠธ(3)

์นผ๋“ ๊ฐœ๊ตฌ๋ฆฌยท2025๋…„ 2์›” 10์ผ
0
post-thumbnail

์šฐ์„ ์ˆœ์œ„ ํ

์„ ์ž…์„ ์ถœ์ด์ง€๋งŒ ์šฐ์„  ์ถœ์ด๋ฉฐ, ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ผ์ด ์ œ์ผ ๋จผ์ € ์ฒ˜๋ฆฌ๋˜๋Š” ๋Œ€๊ธฐ์—ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
์šฐ์„  ์ˆœ์œ„ ํ์˜ ๊ฐ„๋‹จํ•œ ํŠน์ง•

  • ๋‚ด๋ถ€์ ์œผ๋กœ ํž™(heap) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
  • ์‚ฝ์ž… ์‚ญ์ œ๋Š” ํ•ญ์ƒ O(log N)์ด๊ณ , top() (๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์›์†Œ ์กฐํšŒ)๋Š” O(1)์ด๋‹ค.
  • ๊ฐ€์žฅ ํฐ/์ž‘์€ ์›์†Œ๋ฅผ ์ˆœ์‹๊ฐ„์— ์ถ”์ถœํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์— ์ตœ์ ์ด๋‹ค.

C++ STL์—์„œ priority_queue๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์žฅ ํฐ ์›์†Œ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š”(์ตœ๋Œ€ ํž™) ๊ตฌ์กฐ์ด๋‹ค. ์ฆ‰ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ’์ด ํฌ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int main()
{
	priority_queue<int> pq;
    pq.push(5);
    pq.push(2);
    pq.push(8);
    
    //top() ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜
    cout<<"ํ˜„์žฌ top"<<pq.top()<<endl; //8
    
    pq.pop; //top(8) ์ œ๊ฑฐ
}

์ตœ์†Œ ํž™๋„ ๊ฐ€๋Šฅํ•œ๋ฐ ์„ธ ๋ฒˆ์งธ ํ…œํ”Œ๋ฆฟ ์ธ์ž๋ฅผ greater<์ž๋ฃŒํ˜•>์œผ๋กœ ์ฃผ๋ฉด ๋œ๋‹ค.

priority_queue<int, vector<int>, greater<int>> minPq;
minPq.push(10);
minPq.push(5);

cout<<minPq.top()<<endl; // 5

์ˆœ์—ด

์ˆœ์—ด๊ณผ ๊ด€๋ จํ•œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ๋Š” next_permutation/ prev_permutation์„ ์“ฐ๋ฉด ๋œ๋‹ค. next_permutation์€ ์ฃผ์–ด์ง„ ๋ฒ”์œ„๋ฅผ ์‚ฌ์ „์ˆœ์œผ๋กœ ๋‹ค์Œ ์ˆœ์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  prev_permutation์€ ์ฃผ์–ด์ง„ ๋ฒ”์œ„๋ฅผ ์‚ฌ์ „์ˆœ์œผ๋กœ ์ด์ „ ์ˆœ์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด๋‹ค

์›๋ณธ ๋ฐ์ดํ„ฐ๋Š” ์ •๋ ฌ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค. "์ฃผ์–ด์ง„ ์ˆœ์—ด์˜ ๋ชจ๋“  ์ˆœ์—ด ์ƒ์„ฑ", "์‚ฌ์ „ ์ˆœ์œผ๋กœ ํŠน์ • ์ˆœ์—ด ์ฐพ๊ธฐ"์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ์„ ๋Œ€ ์œ ์šฉํ•˜๋‹ค.

int main()
{
	vector<int> v= {1,2,3};
   	for(int x: v) cout<<x<<" "; //123
    cout<<endl;
    
    next_permutation(v.begin(), v.end()));//132
    
    for(int x: v) cout<<x<< " ";
    cout<<endl;
}

k๋ฒˆ์งธ ๊ฐ’ ์ฐพ๊ธฐ

nth_element๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค ์ด๊ฒƒ์€ ํŒŒํ‹ฐ์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ n๋ฒˆ์งธ๋กœ ์ž‘์€ ์›์†Œ๋ฅผ ๋ฐฐ์—ด์˜ n๋ฒˆ์งธ ์œ„์น˜๋กœ ๋ณด๋‚ธ ๋’ค ๊ทธ ์™ผ์ชฝ์€ n๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋ฅผ, ์˜ค๋ฅธ์ชฝ์€ n๋ฒˆ์งธ๋ณด๋‹ค ํฐ ์›์†Œ๋“ค๋กœ ๋ฐ˜์ •๋ ฌ์„ ํ•œ๋‹ค

int main()
{
	vector<int> v= {9,1,4,7,2,6};
    nth_element(v.begin(), v.begin()+2, v.end());
    cout<< "3๋ฒˆ์งธ๋กœ ์ž‘์€ ์›์†Œ: "<< v[2]<<endl;
}
profile
๋ฉ”ํƒ€์ญ์ด

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