๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Code Tree

[์ฝ”๋“œํŠธ๋ฆฌ] Tree Set

SW์ค‘์‹ฌ๋Œ€ํ•™ ์‚ฌ์—…๋‹จ์—์„œ CodeTree์™€ ํ•จ๊ป˜ ์‹ค์‹œํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ ์บ ํ”„์— ์ฐธ์—ฌํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

* ์ฐธ๊ณ  : python๊ณผ c++, java ๋“ฑ ์–ธ์–ด๋ณ„๋กœ ์„ค๋ช…์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„ ์กด์žฌ! ํ•„์ž๋Š” c++ ์‚ฌ์šฉ.

 

xxilliant ์ œ์ž‘

set STL

C++์—์„œ๋Š” set์ด๋ผ๋Š” STL์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

set์€ TreeSet ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ์œผ๋ฉฐ, ์ด TreeSet์ด ๋ฐ”๋กœ ๊ท ํ˜• ์žกํžŒ ์ด์ง„ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋ฐ์ดํ„ฐ๋“ค์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ํ•จ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ž…๋‹ˆ๋‹ค.

set์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” #include <set> ํ—ค๋”์™€, set<T> name; ํ˜•ํƒœ์˜ ์„ ์–ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

T๋Š” ํƒ€์ž…์œผ๋กœ, set ์•ˆ์— ๋“ค์–ด๊ฐˆ ์›์†Œ์˜ ํƒ€์ž…์„ ์ ์–ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

#include <iostream>
#include <set>

using namespace std;

int main() {
    set<int> s;
    return 0;
}
 

set์„ ์ด์šฉํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ 7๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. set<int> s;๋กœ ์„ ์–ธ๋˜์–ด ์‚ฌ์šฉ๋  ๋•Œ๋ฅผ ์˜ˆ๋กœ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

  1. s.insert(E)

treeset์— ๋ฐ์ดํ„ฐ E๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

  1. s.erase(E)

ํ˜„์žฌ treeset์— ๋“ค์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ ์ค‘ ์ˆซ์ž E๋ฅผ ์ฐพ์•„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

 

  1. s.find(E)

ํ˜„์žฌ treeset์— ์ˆซ์ž E๊ฐ€ ๋“ค์–ด ์žˆ๋Š”์ง€๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์žˆ๋‹ค๋ฉด ํ•ด๋‹น iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์—†๋‹ค๋ฉด s.end()๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด s.find(E) != s.end(), ์—†๋‹ค๋ฉด s.find(E) == s.end()๋ฅผ ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

  1. s.lower_bound(E)

E๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฐ ์ตœ์ดˆ์˜ ์ˆซ์ž๊ฐ€ ์ ํ˜€์žˆ๋Š” iterator ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—†๋‹ค๋ฉด s.end()๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•ž์— *์„ ๋ถ™์ธ *s.lower_bound(E)๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

  1. s.upper_bound(E)

E๋ณด๋‹ค ํฐ ์ตœ์ดˆ์˜ ์ˆซ์ž๊ฐ€ ์ ํ˜€์žˆ๋Š” iterator ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์—†๋‹ค๋ฉด s.end()๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•ž์— *์„ ๋ถ™์ธ *s.upper_bound(E)๋ฅผ ์ด์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

  1. *s.begin()

๊ธฐ๋ณธ์ ์œผ๋กœ treeset์€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ํ•ด์ค๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ treeset์˜ ์‹œ์ž‘ ์œ„์น˜์ธ s.begin()์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์€ treeset์— ์ ํ˜€์žˆ๋Š” ๊ฐ’๋“ค ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋Š” *s.begin()์œผ๋กœ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

  1. *s.rbegin()

๊ธฐ๋ณธ์ ์œผ๋กœ treeset์€ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ด๋ฏ€๋กœ, treeset์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ๋“ค์–ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ s.end()๋Š” treeset์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์›์†Œ์˜ ์œ„์น˜๊ฐ€ ์•„๋‹ˆ๋ผ, ๋งˆ์ง€๋ง‰ ์›์†Œ ๊ทธ ๋‹ค์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„์–ด์žˆ๋Š” ๋ ์œ„์น˜๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์›์†Œ์˜ ์œ„์น˜(๊ฐ€์žฅ ํฐ ๊ฐ’)๋Š” ์‹ค์ œ๋กœ s.rbegin()์ด๋ฉฐ, ์ตœ๋Œ“๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” *s.rbegin()์„ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋•Œ, set์— ์•„๋ฌด ์›์†Œ๊ฐ€ ์—†๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” s.rbegin() != s.rend()์‹์œผ๋กœ ๋น„๊ต๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•จ์— ์œ ์˜ํ•ฉ๋‹ˆ๋‹ค.

 

xxilliant ์ œ์ž‘

 

์ถœ์ฒ˜ ์ฝ”๋“œํŠธ๋ฆฌ