๐Ÿ“ Coding Test Study/C++

C++ sort ํ•จ์ˆ˜ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ(๋ฐฐ์—ด, ๋ฒกํ„ฐ)

ibelieveinme 2021. 4. 2. 00:35
728x90

* C++ sortํ•จ์ˆ˜๋ž€? 

: C++STL์—์„œ ์ œ๊ณตํ•˜๋Š” sort ์•Œ๊ณ ๋ฆฌ์ฆ˜

 

- ํ—ค๋”ํŒŒ์ผ: <algorithm>

- ๊ตฌ๋ฌธ: sort(start, end); //start๋ถ€ํ„ฐ end๊ฐœ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ(default)๋กœ ์ •๋ ฌํ•œ๋‹ค.

- ๋‚ด๋ถ€๋Š” Quick sort(ํ€ต ์ •๋ ฌ)๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(NlogN)์„ ๊ฐ€์ง„๋‹ค.

 

1) ํ•จ์ˆ˜ ์›ํ˜•

template <typename T>
void sort(T start, T end);

template <typename T>
void sort(T start, T end, Compare comp);

: 3๋ฒˆ์งธ ์ธ์ž ๊ฐ’(Compare comp)์„ ๋„ฃ์œผ๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ ๋“ฑ์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค. compare ํ•จ์ˆ˜๋Š” true ์ธ ๊ฒฝ์šฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. 

 

2) ๋ฐฐ์—ด(array) ์‚ฌ์šฉํ•  ๋•Œ ์˜ˆ์‹œ

sort(arr, arr+n); //๋ฐฐ์—ด ์ „์ฒด๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ
sort(arr+i, arr+n); //arr[i]~arr[n]๊นŒ์ง€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ

๋ฐฐ์—ด์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์€ ์•„๋ž˜์ฒ˜๋Ÿผ ๋น„๊ตํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์„œ sort()ํ•จ์ˆ˜์˜ 3๋ฒˆ์งธ ์ธ์ž๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

#include <algorithm>
using namespace std; 

bool desc(int a, int b){ //๋น„๊ตํ•จ์ˆ˜ ๊ตฌํ˜„ํ•ด์„œ sort()ํ•จ์ˆ˜ ์ธ์ž๋กœ ๋„ฃ์–ด์ฃผ๊ธฐ
  return a > b; 
} 

int main(void){ 
  int arr[10] = {5, 1, 3, 6, 2, 10, 4, 7, 8, 9}; 
  sort(arr, arr+10, desc); // ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ: 10 9 8 7 6 5 4 3 2 1
  
  return 0; 
}

arr ๋ฐฐ์—ด ๋ฒ”์œ„ ๋‚ด์˜ ๊ฐ’๋“ค์— ๋Œ€ํ•ด descํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•ด์„œ true๊ฐ€ ๋ฐ˜ํ™˜๋  ๋•Œ ์ •๋ ฌ์„ ์‹ค์‹œํ•˜๊ฒ ๋‹ค๋Š” ๋ง์ด๋‹ค.

์ฆ‰, a๊ฐ€ b๋ณด๋‹ค ํด ๊ฒฝ์šฐ(true) sort๋ฅผ ์‹ค์‹œํ•ด์„œ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์ด ๋˜๊ฒŒ๋” ํ•ด์ค€๋‹ค.

 

 

3) ๋ฒกํ„ฐ(vector) ์‚ฌ์šฉํ•  ๋•Œ ์˜ˆ์‹œ

sort(v.begin(), v.end()); // ๋ฒกํ„ฐ ์ „์ฒด๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ
sort(v.begin() + i, v.end()); // v[i]~๋๊นŒ์ง€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ
sort(v.begin(), v.end(), greater<int>()); // ๋ฒกํ„ฐ ์ „์ฒด๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•  ๋•Œ

 

cf) ์ •๋ ฌ๊ด€๋ จ ๋ฌธ์ œ๋“ค

 

11650๋ฒˆ: ์ขŒํ‘œ ์ •๋ ฌํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ์ ์˜ ๊ฐœ์ˆ˜ N (1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” i๋ฒˆ์ ์˜ ์œ„์น˜ xi์™€ yi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (-100,000 ≤ xi, yi ≤ 100,000) ์ขŒํ‘œ๋Š” ํ•ญ์ƒ ์ •์ˆ˜์ด๊ณ , ์œ„์น˜๊ฐ€ ๊ฐ™์€ ๋‘ ์ ์€ ์—†๋‹ค.

www.acmicpc.net

 

10825๋ฒˆ: ๊ตญ์˜์ˆ˜

์ฒซ์งธ ์ค„์— ๋„ํ˜„์ด๋„ค ๋ฐ˜์˜ ํ•™์ƒ์˜ ์ˆ˜ N (1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๊ฐ ํ•™์ƒ์˜ ์ด๋ฆ„, ๊ตญ์–ด, ์˜์–ด, ์ˆ˜ํ•™ ์ ์ˆ˜๊ฐ€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์ฃผ์–ด์ง„๋‹ค. ์ ์ˆ˜๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 1

www.acmicpc.net

 

728x90