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

๐Ÿ“š ์ „๊ณต ๊ณต๋ถ€

(55)
[๋ธ”๋ก์ฒด์ธ] 1. ๋ธ”๋ก์ฒด์ธ ๊ฐœ์š” : Blockchain Overview ๋ชฉ์ฐจ : ์•”ํ˜ธํ™”ํ์™€ ๋น„ํŠธ์ฝ”์ธ์˜ ๋“ฑ์žฅ / ๋ธ”๋ก์ฒด์ธ ๊ฐœ์š” / ๋ธ”๋ก์ฒด์ธ ์šฉ์–ด ์ •๋ฆฌ ์•”ํ˜ธํ™”ํ์™€ ๋น„ํŠธ์ฝ”์ธ์˜ ๋“ฑ์žฅ ์•”ํ˜ธํ™”ํ์˜ ์—ญ์‚ฌ - ์‚ฌ์ดํผ ํŽ‘ํฌ์˜ ๋“ฑ์žฅ (Cypher Punk) ์•”ํ˜ธ+punk์˜ ํ•ฉ์„ฑ์–ด ๊ฐœ์ธ์˜ ์ž์œ ์™€ ์‚ฌ์ƒํ™œ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ์•”ํ˜ธํ™”๋œ ์ฒด๊ณ„ ๊ตฌ์ถ•์„ ์ฃผ์žฅํ•˜๋Š” ๋‹จ์ฒด ์ค‘์•™์ง‘๊ถŒํ™”๋œ ์ •๋ถ€๋‚˜ ๊ธฐ๊ด€์ด ๊ฐœ์ธ ํ”„๋ผ์ด๋ฒ„์‹œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•˜๋‹ˆ, ์Šค์Šค๋กœ ํ”„๋ผ์ด๋ฒ„์‹œ๋ฅผ ๋ณดํ˜ธํ•˜๊ณ  ์—ด๋ฆฐ ์‚ฌํšŒ๋ฅผ ์ถ”๊ตฌ 1980๋…„๋Œ€๋ถ€ํ„ฐ ์•”ํ˜ธํ™”ํ๋Š” ์‚ฌ์ดํผํŽ‘ํฌ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์—ฐ๊ตฌ๋จ - 1984 ๋ฐ์ด๋น„๋“œ ์ฐจ์›€์˜ Ecash & DigiCash ์„ค๋ฆฝ : Blind Signature, ๋น„๋ฐ€ํ‚ค ๊ณต์œ ๊ธฐ๋Šฅ ํฌํ•จ - 1997 ์•„๋‹ด ๋ฐฑ์˜ HashCash : ์ˆ˜ํ•™์  ํผ์ฆ ๊ธฐ๋ฐ˜ - 1998 ์›จ์ด ๋‹ค์ด์˜ B-Money : ์ˆ˜ํ•™ ํผ์ฆ์˜ ๋ณด์ƒ์œผ๋กœ ์•”ํ˜ธํ™”ํ ์ง€๊ธ‰, ๊ฒฝ์Ÿ์  ์ฑ„๊ตด-์‹ ๋ขฐ์„ฑ ํ™•๋ณด์˜..
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 7. ์ด๋ถ„ ํƒ์ƒ‰ 1. ํƒ์ƒ‰ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ N๊ฐœ์˜ ์ •์ˆ˜ ๋ฐฐ์—ด A[0], ..., A[N-1]์ด ์žˆ๋‹ค. X๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, A[i] = X๋ผ๋ฉด i๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ find(N, X)๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ด ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ compare(i, val)์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด๋Š” A[i]=val์ด๋ฉด 0, A[i] val์ด๋ฉด -1์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. N์€ ์ตœ๋Œ€ 100์ด๋‹ค. int find(int sub, int N, int X) { int start = 0, end = N-1, t; while (start 0) start = mid + 1; // ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด start๋ฅผ ๋‹น๊ธฐ๊ธฐ else if (v) end = mid - 1; // ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ํฌ๋ฉด end๋ฅผ ๋‹น๊ธฐ๊ธฐ else return mid; }..
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 6. ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ 1. Segment Tree ๋ถ€๋ถ„ํ•ฉ ๋ฌธ์ œ์—์„œ ์‘์šฉ ๊ฐ€๋Šฅ ์ƒ์„ฑ ์ฝ”๋“œ 2. ํ•ฉ์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ [start, end]์˜ ํ•ฉ์„ ๊ตฌํ•˜๋ ค๋ฉด ๋ฃจํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋‹ค์Œ์„ ์ ๊ฒ€ํ•œ๋‹ค. ๋…ธ๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ๊ฐ„์ด [left, right]๋ผ๋ฉด ๋‹ค์Œ์˜ 4๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ฐ ๊ฒฝ์šฐ๋งˆ๋‹ค ์ฒ˜๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (1) [start, end]์™€ [left, right]๊ฐ€ ๊ฒน์น˜์ง€ ์•Š์Œ -> ํ•  ์ผ์ด ์—†๋‹ค (2) [start, end]๊ฐ€ [left, right]๋ฅผ ํฌํ•จ -> ๋ฏธ๋ฆฌ ๊ตฌํ•ด๋‘” [left, right]์˜ ํ•ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค. (3) [start, end]๋ฅผ [left, right]๊ฐ€ ํฌํ•จ -> ๋‘ ์ž์‹ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์ •ํ™•ํžˆ ์–ด๋Š ๋…ธ๋“œ๊ฐ€ [left, right]๋ฅผ ํฌํ•จํ•˜๋Š”์ง€ ์ฐพ๋Š”๋‹ค. (4) [start, end]๊ฐ€ [left, right..
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 5. ์š•์‹ฌ์Ÿ์ด ๊ธฐ๋ฒ• 1. ์š•์‹ฌ์Ÿ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ : Greedy algorithm ๋งค ๋‹จ๊ณ„๋งˆ๋‹ค ๊ฐ ๋‹จ๊ณ„์—์„œ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•œ๋‹ค. (ํ˜„์žฌ ์ˆœ๊ฐ„๋งˆ๋‹ค) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‚˜, ๊ตฌํ•œ ๋‹ต์ด ์ •๋‹ต์ธ์ง€ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค. ๊ธฐ๋ณธ ํ˜•ํƒœ 2. ํšŒ์˜์‹ค ๋ฐฐ์ • ๋ฌธ์ œ ํ•œ ๊ฐœ์˜ ํšŒ์˜์‹ค์ด ์žˆ๋Š”๋ฐ, n๊ฐœ์˜ ํšŒ์˜ ์ผ์ •์ด ์žˆ๊ณ  ์ด ํšŒ์˜์‹ค์„ ์ด์šฉํ•˜์—ฌ ํšŒ์˜ํ•œ๋‹ค. ๊ฐ ํšŒ์˜ i์— ๋Œ€ํ•ด์„œ ์‹œ์ž‘ ์‹œ๊ฐ„ Si์™€ ๋ ์‹œ๊ฐ„ Fi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ํšŒ์˜๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์€ ํšŸ์ˆ˜์˜ ํšŒ์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ผ์ •์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. โ– ์ž…๋ ฅ โžข ์ฒซ ์ค„์—๋Š” ํšŒ์˜์˜ ์ˆ˜ n โžข ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ n+1์ค„๊นŒ์ง€ ๋‘ ์ •์ˆ˜ Si์™€ Fi โ– ์ถœ๋ ฅ โžข ์žก์€ ํšŒ์˜๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์ถœ๋ ฅ(๋‘˜ ์ด์ƒ์˜ ๋‹ต์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ) ๊ฐ€๋Šฅํ•œ ์ ‘๊ทผ ๋ฐฉ๋ฒ• - ํšŒ์˜์‹œ๊ฐ„์ด ์งง์€ ๊ฒƒ ๋ถ€ํ„ฐ ๋„ฃ๋Š”๋‹ค -> ๋ฐ˜๋ก€ ์กด์žฌ - ๋‹ค..
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 4. ์ž๋ฃŒ๊ตฌ์กฐ2 1. ํŠธ๋ฆฌ ์ง€๋ฆ„ ํŠธ๋ฆฌ์˜ ๋‘ ์ •์  u, v์˜ ๊ฑฐ๋ฆฌ์˜ ์ตœ๋Œ“๊ฐ’ (1) O(n^3) : brute force (2) O(n^2) : u๋ฅผ ๊ณ ์ •ํ•˜๊ณ  bfsํ•œ๋‹ค. (3) O(n) ํŠธ๋ฆฌ์—์„œ ์ž„์˜์˜ ์ •์  x๋ฅผ ์„ ํƒํ•˜๊ณ  x์—์„œ ๊ฐ€์žฅ ๋จผ ์ •์  y๋ฅผ ์ฐพ๋Š”๋‹ค.(bfs) ์ดํ›„ y์—์„œ ๊ฐ€์žฅ ๋จผ ์ •์  z๋ฅผ ์ฐพ๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฉด y์™€ z๊ฐ€ ๊ฐ€์žฅ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ์žˆ๋Š” ์ •์  ์Œ์ด๋‹ค. ์ฆ๋ช… ์›ํ•˜๋Š” ๋‹ต์ด ๋‘ ์ •์  u์™€ v์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด 3๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”๋ฐ, x์—์„œ ๊ฐ€์žฅ ๋จผ ์ ์ด y๋ผ๊ณ  ํ•˜๋ฉด (1) x = u / x = v (2) y = u / y = v (3) x,y,u,v ๋ชจ๋‘ ๋‹ค๋ฅธ ๊ฒฝ์šฐ (1)๊ณผ (2)๋Š” ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‹ต์ด ๋งž๋‹ค๋Š” ๊ฒƒ์ด ์ž๋ช…ํ•˜๋‹ค. (3)์˜ ๊ฒฝ์šฐ๋Š” u~y ๊ฒฝ๋กœ์™€ u~v ๊ฒฝ๋กœ๊ฐ€ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ์ด์™ธ์—๋Š” ์—†์–ด์•ผ ํ•œ๋‹ค. x,y,u,..
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 3. ์ž๋ฃŒ๊ตฌ์กฐ1 1. RMQ : Range Minimum Query (๋ฒ”์œ„ ์ตœ์†Œ ์ฟผ๋ฆฌ) ๋ฐฐ์—ด์˜ ๋ถ€๋ถ„๋ฐฐ์—ด์—์„œ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๊ธฐ (1) O(n^3) ์ „์ฒ˜๋ฆฌ, O(1) ์งˆ์˜ : brute force ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๋Šฅํ•œ RMQ(a,b)์— ๋Œ€ํ•œ ๋‹ต์„ ๋ชจ๋‘ ์ €์žฅํ•ด๋†“๋Š”๋‹ค. n^2์นธ์„ ์ฑ„์›Œ์•ผํ•˜๊ณ , ํ•œ ์นธ์„ ์ฑ„์šธ ๋•Œ ์ตœ๋Œ€ O(n)์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. (2) O(n^2) ์ „์ฒ˜๋ฆฌ, O(1) ์งˆ์˜ : ๊ฐ€๋Šฅํ•œ RMQ(a,b)์— ๋Œ€ํ•œ ๋‹ต์„ ๋ชจ๋‘ ์ €์žฅํ•˜๋Š”๋ฐ, RMQ(a,b+1) = min(RMQ(a,b) , A[b+1])์„ ์‚ฌ์šฉํ•˜์—ฌ n^2์นธ์„ ๊ฐ๊ฐ O(1)์˜ ์‹œ๊ฐ„์œผ๋กœ ์ฑ„์šธ ์ˆ˜ ์žˆ๋‹ค. (3) O(n) ์ „์ฒ˜๋ฆฌ, O(sqrt(n)) ์งˆ์˜ : ๋ฐฐ์—ด์„ sqrt(n) ๋ฌถ์Œ์œผ๋กœ ๋‚˜๋ˆˆ ํ›„ ๊ฐ ๋ฌถ์Œ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š”๋ฐ์— O(n)์ด ๊ฑธ๋ฆฌ๋ฉฐ, RMQ(a,b)๋ฅผ ๊ตฌํ•˜..
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 2. ๊ธฐ์ดˆ์ˆ˜ํ•™ 1. ๋ฒกํ„ฐ์˜ ์™ธ์  : cross product 2. ์™ธ์ ์˜ ์‘์šฉ : ๋ถ€ํ˜ธ ์ ๊ฒ€ 3. CCW ์•Œ๊ณ ๋ฆฌ์ฆ˜ : Counter-Clock Wise ์„ธ ์ ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ A->B์™€ A->C ๋‘ ๋ฒกํ„ฐ์˜ ์™ธ์ ์˜ ๋ถ€ํ˜ธ๊ฐ€ ๋ฐฉํ–ฅ์„ ๊ฒฐ์ •ํ•จ. int ccw(int x1, int y1, int x2, int y2, int x3, int y3){ int tmp = x1*y2 + x2*y3 + x3*y1; tmp -= (y1*x2 + y2*x3 + y3*x1); if(tmp > 0) return 1; // a์— ๋Œ€ํ•ด b๊ฐ€ ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ(์™ผ์ชฝ)์— ์žˆ์Œ else if(tmp < 0) return -1; // a์— ๋Œ€ํ•ด b๊ฐ€ ์‹œ๊ณ„ ๋ฐฉํ–ฅ(์˜ค๋ฅธ์ชฝ)์— ์žˆ์Œ else return 0; } 4. ์‘์šฉ : ์„ ๋ถ„์˜ ๊ต์ฐจ ์—ฌ๋ถ€ a-b๋ฅผ ์ด์€ ๋ฒกํ„ฐ A์— ..
[๋ฌธ์ œํ•ด๊ฒฐ๊ธฐ๋ฒ•] 1. C++ 1. ์‚ฌ์šฉ ์–ธ์–ด C : ๊ฐ€์žฅ ์ต์ˆ™ํ•˜์ง€๋งŒ ์ง€์› ๊ธฐ๋Šฅ์ด ์ ์Œ C++ : STL์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ™œ์šฉ Java : java.util์— ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด ๋งŽ๋‹ค. ์‹คํ–‰์‹œ๊ฐ„์ด ๋Š๋ ค์„œ ์†๋„์—์„œ ์ œํ•œ์„ ๋ฐ›์Œ Python : ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์‰ฝ์ง€๋งŒ, ์‹คํ–‰์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๋Š๋ฆฌ๋‹ค. 2. ๋ฌธ์ œ ํ•ด๊ฒฐ -> ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋Šฅ๋ ฅ์„ ๋ฌป๋Š” ๋ฌธ์ œ 3. auto for(auto a : A){ ~ } 4. for : ๋ฐ˜๋ณต๋ฌธ 5. pair 6. STL : standard template library made by HP in 1994 ์ฝ”๋“œ๋ฅผ ์งง๊ณ  ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ. 7. template template const T& my_max(const T&x, const T&y){ return (y { 1, 3 } ..