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

โœจ Algorithm/๐Ÿ•‍๐Ÿฆบ ๋ฐ”ํ‚น๋… ๊ฐœ๋…10

[0x0A] DFS DFS depth first search ๋‹ค์ฐจ์› ๋ฐฐ์—ด์—์„œ ๊ฐ ์นธ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ ๊นŠ์ด๋ฅผ ์šฐ์„ ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ˆ์‹œ ๋ชจ๋“  ์นธ์ด ์Šคํƒ์— 1๋ฒˆ์”ฉ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์นธ์ด N๊ฐœ์ผ ๋•Œ O(N) ์‹œ์ž‘ํ•˜๋Š” ์นธ์„ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธํ•˜๋Š” ํ‘œ์‹œ๋ฅผ ๋‚จ๊น€ ์Šคํƒ์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ด์„œ ๊ทธ ์นธ๊ณผ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ์นธ์— ๋Œ€ํ•ด (3)์„ ์ง„ํ–‰ ํ•ด๋‹น ์นธ์„ ์ด์ „์— ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ , ์ฒ˜์Œ์œผ๋กœ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ๋‚จ๊ธฐ๊ณ  ํ•ด๋‹น ์นธ์„ ์Šคํƒ์— ์‚ฝ์ž… ์Šคํƒ์ด ๋นŒ ๋•Œ๊นŒ์ง€ (2)๋ฅผ ๋ฐ˜๋ณต #include using namespace std; #define X first #define Y second // pair์—์„œ first, second๋ฅผ ์ค„์—ฌ์„œ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ int board[502][502] = { ... }; // 1.. 2023. 6. 26.
[0x09] BFS BFS breadth first search ๋‹ค์ฐจ์› ๋ฐฐ์—ด์—์„œ ๊ฐ ์นธ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ ๋„ˆ๋น„๋ฅผ ์šฐ์„ ์œผ๋กœ ๋ฐฉ๋ฌธํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณผ์ • ๋ชจ๋“  ์นธ์ด ํ์— 1๋ฒˆ์”ฉ ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ์นธ์ด N๊ฐœ์ผ ๋•Œ O(N) ์‹œ์ž‘ํ•˜๋Š” ์นธ์„ ํ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ํ‘œ์‹œ ๋‚จ๊ธฐ๊ธฐ ํ์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ด์–ด ๊ทธ ์นธ์— ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ์นธ์— ๋Œ€ํ•ด (3)์„ ์ง„ํ–‰ ํ•ด๋‹น ์นธ์„ ์ด์ „์— ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด, ์•„๋ฌด ๊ฒƒ๋„ ํ•˜์ง€ ์•Š๊ณ , ์ฒ˜์Œ์œผ๋กœ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋Š” ํ‘œ์‹œ๋ฅผ ๋‚จ๊ธฐ๊ณ  ํ•ด๋‹น ์นธ์„ ํ์— ์‚ฝ์ž… ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ (2)๋ฅผ ๋ฐ˜๋ณต // x๊ฐ€ ํ–‰, y๊ฐ€ ์—ด #include #include using namespace std; #define X first #define Y second // pair์—์„œ first, second๋ฅผ ์ค„์—ฌ์„œ ์“ฐ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ int board[502.. 2023. 6. 26.
[0x08] ์Šคํƒ์˜ ํ™œ์šฉ(์ˆ˜์‹์˜ ๊ด„ํ˜ธ ์Œ) ์ˆ˜์‹์˜ ๊ด„ํ˜ธ ์Œ ๊ด„ํ˜ธ์Œ์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ์ฒดํฌ ๊ด€์ฐฐ ๊ด„ํ˜ธ 1์ข…๋ฅ˜ ๊ด„ํ˜ธ 2์ข…๋ฅ˜ → ์—ฐ์†๋œ ๊ด„ํ˜ธ ์‚ญ์ œ๋Š” ๊ฐ€๋Šฅ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ๋ฌธ์ž์—ด์„ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฝ์–ด๋‚˜๊ฐˆ ๋•Œ, ๋‹ซ๋Š” ๊ด„ํ˜ธ๋Š” ๋‚จ์•„์žˆ๋Š” ๊ด„ํ˜ธ ์ค‘์—์„œ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋“ค์–ด์˜จ ์—ฌ๋Š” ๊ด„ํ˜ธ์™€ ์ง์„ ์ง€์–ด ์—†์• ๋ฒ„๋ฆฌ๋Š” ๋ช…๋ น์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ๋œ๋‹ค 2023. 6. 26.
[0x07] ๋ฑ ์ •์˜์™€ ์„ฑ์งˆ ์ •์˜ double-ended queue ์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์ „๋ถ€ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ ์„ฑ์งˆ ์›์†Œ์˜ ์ถ”๊ฐ€์™€ ์ œ๊ฑฐ : O(1) ์ œ์ผ ์•ž/๋’ค์˜ ์›์†Œ ํ™•์ธ : O(1) ์ œ์ผ ์•ž/๋’ค์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์˜ ํ™•์ธ/๋ณ€๊ฒฝ์ด ์›์น™์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ ์ธ๋ฑ์Šค๋กœ ์›์†Œ ์ ‘๊ทผ ๊ฐ€๋Šฅ ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„ const int MAX = 1e7; int data[2*MAX + 1]; int head = MAX, tail = MAX; // ์‹œ์ž‘ ์ง€์ ์„ ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์œผ๋กœ : ์•ž๋’ค๋กœ ํ™•์žฅ // head : ์‹œ์ž‘. tail : ๋‹ค์Œ์— ๋“ค์–ด๊ฐˆ ์›์†Œ์˜ ์ž๋ฆฌ void push_front(int x) data[--head] = x; void push_back(int x) data[tail++] = x; void pop_front() head++; v.. 2023. 6. 26.