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

์ „์ฒด ๊ธ€199

[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.
[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.
[0x02] ๊ธฐ์ดˆ ์ฝ”๋“œ ์ž‘์„ฑ ์š”๋ น 2 ํ•จ์ˆ˜ ์ธ์ž ๋ฐฐ์—ด์„ ์ธ์ž๋กœ ๋„˜๊ธฐ๋ฉด ์ฃผ์†Œ๊ฐ’์ด ๋„˜์–ด๊ฐ„๋‹ค ๋ณ€์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋„˜๊ธฐ๋ฉด ๋ณต์‚ฌ๋œ ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค & (reference)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฐธ์กฐ ๋Œ€์ƒ์˜ ์ฃผ์†Œ ์ •๋ณด๋งŒ ๋„˜์–ด๊ฐ STL standard template library STL์„ ํ•จ์ˆ˜ ์ธ์ž๋กœ ๋„˜๊ธธ ๋•Œ ๊ทธ๋ƒฅ STL์„ ํ•จ์ˆ˜ ์ธ์ž๋กœ ์‹ค์–ด๋ณด๋‚ด๋ฉด ๋ณต์‚ฌ๋ณธ์„ ๋„˜๊ธฐ๋Š” ๊ฒƒ // ํฌ๊ธฐ๊ฐ€ n์ธ vector 2๊ฐœ๋ฅผ ๋น„๊ตํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ // n๋งŒํผ ๋ณต์‚ฌํ•˜๊ณ  ๋ณด๋‚ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— O(N) ์‹œ๊ฐ„ ๋ณต์žก๋„ bool cmp1(vector v1, vector v2, int idx){ return v1[idx] > v2[idx] } ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ๊ณต๋ฐฑ ํฌํ•จ ๋ฌธ์ž์—ด ์ž…๋ ฅ scanf์™€ cin ๋ชจ๋‘ ๊ณต๋ฐฑ ํฌํ•จ ๋ฌธ์ž์—ด ์ž…๋ ฅ์ด ๊นŒ๋‹ค๋กญ๋‹ค ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• scanf์˜ ์˜ต์…˜ char a1[10]; scanf("%[^\.. 2023. 6. 20.