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

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

[0x06] ํ ์ •์˜์™€ ์„ฑ์งˆ ์ •์˜ ํ•œ์ชฝ ๋์—์„œ ์›์†Œ๋ฅผ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์„ฑ์งˆ ์›์†Œ์˜ ์ถ”๊ฐ€์™€ ์ œ๊ฑฐ : O(1) ์ œ์ผ ์•ž/๋’ค์˜ ์›์†Œ ํ™•์ธ : O(1) ์ œ์ผ ์•ž/๋’ค์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์˜ ํ™•์ธ/๋ณ€๊ฒฝ์ด ์›์น™์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„ const int MAX = 1e7; int data[MAX]; int head = 0, tail = 0; void push(int x) data[tail++] = x; void pop() head++; int front() return data[head]; int back() return data[tail--]; STL queue #include 2023. 6. 20.
[0x05] ์Šคํƒ ์ •์˜์™€ ์„ฑ์งˆ ์ •์˜ ํ•œ์ชฝ ๋์—์„œ๋งŒ ์›์†Œ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋บผ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ (restricted structure) ์„ฑ์งˆ ์›์†Œ์˜ ์ถ”๊ฐ€์™€ ์ œ๊ฑฐ : O(1) ์ œ์ผ ์ƒ๋‹จ์˜ ์›์†Œ ํ™•์ธ : O(1) ์ œ์ผ ์ƒ๋‹จ์ด ์•„๋‹Œ ๋‚˜๋จธ์ง€ ์›์†Œ๋“ค์˜ ํ™•์ธ/๋ณ€๊ฒฝ์ด ์›์น™์ ์œผ๋กœ ๋ถˆ๊ฐ€๋Šฅ ๊ธฐ๋Šฅ๊ณผ ๊ตฌํ˜„ ๊ตฌํ˜„ const int MAX = 1000005; int data[MAX]; int pos = 0; // ๋‹ค์Œ์— ์›์†Œ๊ฐ€ ์ถ”๊ฐ€๋  ๋•Œ ์‚ฝ์ž…ํ•ด์•ผ ํ•˜๋Š” ๊ณณ (์Šคํƒ ๋‚ด ์›์†Œ์˜ ์ˆ˜) void push(int x) data[pos++] = x; void pop() pos--; int top() return data[pos-1]; STL stack #include 2023. 6. 20.
[0x04] ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ •์˜์™€ ์„ฑ์งˆ ์„ฑ์งˆ ์ž„์˜์˜ ์œ„์น˜์— ์žˆ๋Š” ์›์†Œ๋ฅผ ํ™•์ธ/๋ณ€๊ฒฝ : O(N) (๋ถˆ์—ฐ์†์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ์›์†Œ๊นŒ์ง€ ์ฐพ์•„๊ฐ€์•ผ ํ•จ) ์ž„์˜์˜ ์œ„์น˜์— ์›์†Œ๋ฅผ ์ถ”๊ฐ€/์ œ๊ฑฐ : O(1) ์›์†Œ๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์•„ cache hit rate๊ฐ€ ๋‚ฎ์ง€๋งŒ ํ• ๋‹น์ด ๋‹ค์†Œ ์‰ฌ์›€ ์ข…๋ฅ˜ ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ single linked list ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ doubly linked list ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ circular linked list ๋ฐฐ์—ด vs ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ overhead : ์•ž, ๋’ค ์›์†Œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค (2^n byte์ด๋ฉด n๋งŒํผ ์ถ”๊ฐ€๋กœ ํ•„์š”) ๊ตฌํ˜„ struct Node { struct Node *prev, *next; int data; } ์•ผ๋งค ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ const int MAX = 1000005; in.. 2023. 6. 20.
[0x03] ๋ฐฐ์—ด ๋ฐฐ์—ด ์ •์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์›์†Œ๋ฅผ ์—ฐ์†ํ•˜๊ฒŒ ๋ฐฐ์น˜ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์„ฑ์งˆ O(1)์— k๋ฒˆ์งธ ์›์†Œ๋ฅผ ํ™•์ธ/๋ณ€๊ฒฝ ๊ฐ€๋Šฅ ์ถ”๊ฐ€์ ์œผ๋กœ ์†Œ๋ชจ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์–‘ overhead๊ฐ€ ๊ฑฐ์˜ ์—†์Œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ™์–ด์žˆ์œผ๋ฏ€๋กœ cache hit rate๊ฐ€ ๋†’์Œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†ํ•œ ๊ตฌ๊ฐ„์„ ์žก์•„์•ผ ํ•ด์„œ ํ• ๋‹น์— ์ œ์•ฝ์ด ๊ฑธ๋ฆผ ์—ฐ์‚ฐ ์ž„์˜์˜ ์œ„์น˜ ์›์†Œ ํ™•์ธ/๋ณ€๊ฒฝ : O(1) ์›์†Œ๋ฅผ ๋์— ์ถ”๊ฐ€ / ๋งˆ์ง€๋ง‰ ์›์†Œ ๋ณ€๊ฒฝ : O(1) ์ž„์˜์˜ ์œ„์น˜์— ์›์†Œ ์ถ”๊ฐ€/์ œ๊ฑฐ : O(N) → ๋’ค์— ์›์†Œ๋“ค ํ•œ ์นธ ๋’ค๋กœ ๋ฐ€์–ด์•ผ ํ•จ ์ดˆ๊ธฐํ™” ์ „์—ญ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•  ๊ฒฝ์šฐ int๋Š” 0์œผ๋กœ ์ดˆ๊ธฐํ™” ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์“ฐ๋ ˆ๊ธฐ๊ฐ’ ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— { } ๋“ฑ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•จ int a[21]; int b[21][21]; memset (๋น„์ถ”์ฒœ) memset(a, 0, sizeof a); memset(b, 0, .. 2023. 6. 20.