[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: ์ˆœ์—ด๊ณผ ์กฐํ•ฉ (์ฝ”๋“œ, next_permutation ์ด์šฉ, ์ง์ ‘ ๊ตฌํ˜„)
์ปดํ“จํ„ฐ๊ณผํ•™ (CS)/Algorithm 2020. 9. 7. 10:44

์ˆœ์—ด๊ณผ ์กฐํ•ฉ ์ˆœ์—ด ์ •์˜ ์ˆœ์—ด์€ ์ค‘๋ณต์—†์ด n๊ฐœ ์ค‘ r๊ฐœ๋ฅผ ๋ฝ‘์•„ ์ˆœ์„œ๋ฅผ ์ •ํ•ด ๋‚˜์—ดํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ A, B, C ์„ธ๊ฐ€์ง€ ์›์†Œ๊ฐ€ ์žˆ์„ ๋•Œ, 2๊ฐœ๋ฅผ ๋ฝ‘์•„ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ์„ 3P2๋ผ๊ณ  ํ•œ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋ฏ€๋กœ ์ด 6๊ฐ€์ง€ ์ด๋‹ค. ์ˆœ์—ด์€ P(Permutation)๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. $$ {}n\mathrm{P}{r} = \frac{n!}{(n-r)!} $$ ์ค‘๋ณต ์ˆœ์—ด์ด๋ผ๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋Š” ์ˆœ์—ด ์ค‘ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๊ฒƒ์„ ๋‹ค์‹œ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ์ค‘๋ณต ์ˆœ์—ด์€ Π๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. $$ {n}\mathrm{\pi}{r} = n^r $$ ๊ตฌํ˜„ ์ˆœ์—ด // ์ง์ ‘ ๊ตฌํ˜„ void swap(vector& set, int a, int b){ int tmp = set[a]; ..