[C++] ํŽœ์œ… ํŠธ๋ฆฌ(Fenwick Tree)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
ํŽœ์œ… ํŠธ๋ฆฌ(Fenwick Tree) ํŽœ์œ… ํŠธ๋ฆฌ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ์ธ๋ฑ์Šค ํŠธ๋ฆฌ(Binary Indexed Tree)๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. ์ˆœ์„œ๋ฅผ ๊ฐ–๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ตฌ๊ฐ„์˜ ๋Œ€ํ‘œ ๊ฐ’์ด๋‚˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊ธฐ๋ณธ ์›๋ฆฌ https://www.acmicpc.net/blog/view/21 ํŽœ์œ… ํŠธ๋ฆฌ (๋ฐ”์ด๋„ˆ๋ฆฌ ์ธ๋ฑ์Šค ํŠธ๋ฆฌ) ๋ธ”๋กœ๊ทธ: ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ (Segment Tree) ์—์„œ ํ’€์–ด๋ณธ ๋ฌธ์ œ๋ฅผ Fenwick Tree๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Fenwick Tree๋Š” Binary Indexed Tree๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์ค„์—ฌ์„œ BIT๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. Fenwick Tree๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด, ์–ด๋–ค ์ˆ˜ X www.acmicpc.net ํŽœ์œ… ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ค ์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋กœ ๋‚˜ํƒ€๋ƒˆ์„ ๋•Œ ๋งˆ..
[C++] ์Šค์œ„ํ•‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Sweeping Algorithm)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
์Šค์œ„ํ•‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Sweeping Algorithm)๊ณต๊ฐ„์ด๋‚˜ ์ง์„  ์ƒ์—์„œ ํ•œ์ชฝ ์‹œ์ž‘์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ˜๋Œ€ํŽธ ์ข…๋ฃŒ ์ง€์ ๊นŒ์ง€ ์ง€๋‚˜๊ฐ€๋Š”๋ฐ, ๋งˆ์ฃผ์น˜๋Š” ์š”์†Œ๋“ค์— ๋Œ€ํ•ด ํŒ๋‹จ์ด ๋˜๋Š” ๊ธฐ์ค€์„ ์ ์šฉํ•ด ์ •๋‹ต์„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.์ฆ‰, ์ •๋ ฌ๋œ ์š”์†Œ๋“ค์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒํ•˜๋ฉฐ ์—ฐ์‚ฐํ•˜๋ฉด ์ •๋‹ต์ด ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค. ๋ฌธ์ œ https://www.acmicpc.net/problem/2261 2261๋ฒˆ: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋‘ ์ ์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ n(2 ≤ n ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ n๊ฐœ์˜ ์ค„์—๋Š” ์ฐจ๋ก€๋กœ ๊ฐ ์ ์˜ x, y์ขŒํ‘œ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ขŒํ‘œ๋Š” ์ ˆ๋Œ“๊ฐ’์ด 10,000์„ ๋„˜์ง€ ์•Š๋Š” ์ •์ˆ˜์ด๋‹ค. ์—ฌ๋Ÿฌ ์ ์ด ๊ฐ™์€ ์ขŒํ‘œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜๋„www.acmicpc.net#include #include #include #include #include using na..
[C++] ๊ฐ•ํ•œ ์—ฐ๊ฒฐ ์š”์†Œ(ํƒ€์ž”, ์ฝ”์‚ฌ๋ผ์ฃผ)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
๊ฐ•ํ•œ ์—ฐ๊ฒฐ ์š”์†Œ(Strongly Connected Component) ๋‘ ์ •์ ์— ๋Œ€ํ•ด ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๊ฐ€ ๋ชจ๋‘ ์žˆ์„ ๋•Œ ๋‘ ์ •์ ์€ ๊ฐ™์€ ๊ฐ• ๊ฒฐํ•ฉ ์ปดํฌ๋„ŒํŠธ(SCC)์— ์†ํ•œ๋‹ค. ์ฆ‰, ๊ทธ๋ž˜ํ”„์˜ ์‚ฌ์ดํด์—์„œ ๊ฐ™์€ ์‚ฌ์ดํด ๋‚ด์— ์กด์žฌํ•˜๋Š” ์ •์ ๋“ค์€ ๊ฐ™์€ SCC์— ์†ํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์—์„œ๋งŒ ์ •์˜๋œ๋‹ค. 1. ํƒ€์ž” ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1) ๊ธฐ๋ณธ ์›๋ฆฌ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์˜ ์ •์ ๋“ค์„ ๋ฐฉ๋ฌธํ•œ ํ›„ ๋ฐฉ๋ฌธํ•œ ์ •์ ์˜ ๊ฐ„์„ ์„ ํ†ตํ•ด ์ƒ์œ„์—์„œ ๋ฐฉ๋ฌธ๋œ ์ •์ ์„ ๋ฐฉ๋ฌธํ•œ๋‹ค๋ฉด SCC๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค. 2) ๋ฌธ์ œ https://www.acmicpc.net/problem/2150 2150๋ฒˆ: Strongly Connected Component ์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ V(1 ≤ V ≤ 10,000), E(1 ≤ E ≤ 100,00..
[C++] ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(ํฌ๋ฃจ์Šค์นผ)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ(Minimum Spanning Tree) ๋ชจ๋“  ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ํŠธ๋ฆฌ๋ฅผ ์‹ ์žฅ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ–๋Š” ์‹ ์žฅ ํŠธ๋ฆฌ ์ค‘ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ๊ฐ€์žฅ ์ž‘์€ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์œผ๋ฉฐ, ๊ทธ ์™ธ์—๋„ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์†”๋ฆฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค. ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜: ์ž„์˜์˜ ์ •์ ์„ ๋ฃจํŠธ ๋…ธ๋“œ๋กœ ์‚ฝ์ž…ํ•œ ํ›„ ์ธ์ ‘ํ•œ ์ •์ ์˜ ๊ฐ„์„  ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ •์ ์„ ํŠธ๋ฆฌ์— ์‚ฝ์ž…ํ•˜๋ฉฐ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค. ์†”๋ฆฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1. ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Kruskal's algorithm) 1) ๊ธฐ๋ณธ ์›๋ฆฌ ๋ชจ๋“  ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ๊ทธ ๋ชฉ๋ก์„ ์ฐจ๋ก€๋Œ€๋กœ ์ˆœํšŒํ•˜๋ฉฐ ์‚ฌ์ดํด์ด ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ์— ์‚ฝ์ž…ํ•˜๋ฉฐ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ ๋‹ค. 2) ๋ฌธ์ œ www.acmicpc.net/pr..
[C++] ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ(Segment Tree)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ(Segment Tree) ๋ฐฐ์—ด ๋‚ด ๋ฒ”์œ„ ๊ฐ’์„ ๊ตฌํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋ฒ”์œ„์˜ ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊ตฌ๊ฐ„๋“ค์„ ๋ณด์กดํ•˜๊ณ  ์žˆ๋Š” ํŠธ๋ฆฌ์ด๋‹ค. ๋ฆฌํ”„ ๋…ธ๋“œ๋Š” ๋ฐฐ์—ด์˜ ๊ทธ ์ˆ˜ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•˜๊ณ  ๋ฆฌํ”„ ๋…ธ๋“œ ์™ธ ๋…ธ๋“œ๋“ค์€ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ๊ฐ’์ด๋‹ค. ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋…ธ๋“œ๋Š” ๋น„์›Œ์ ธ์žˆ๋Š”๋ฐ, ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ์˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ฑ„์›Œ์•ผํ•œ๋‹ค. ๊ธฐ๋ณธ ์›๋ฆฌ : ํ•ฉ https://www.acmicpc.net/blog/view/9 ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ (Segment Tree) ๋ฌธ์ œ ๋ฐฐ์—ด A๊ฐ€ ์žˆ๊ณ , ์—ฌ๊ธฐ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ƒ๊ฐํ•ด๋ด…์‹œ๋‹ค. ๊ตฌ๊ฐ„ l, r (l ≤ r)์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, A[l] + A[l+1] + ... + A[r-1] + A[r]์„ ๊ตฌํ•ด์„œ ์ถœ๋ ฅํ•˜๊ธฐ i๋ฒˆ์งธ ์ˆ˜๋ฅผ v๋กœ ..
[C++] ๋น„ํŠธ๋งˆ์Šคํฌ(BitMask)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
๋น„ํŠธ๋งˆ์Šคํฌ(BitMask)์ง‘ํ•ฉ ์š”์†Œ๋“ค์˜ ๊ตฌ์„ฑ ์—ฌ๋ถ€๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์œ ์šฉํ•œ ํ…Œํฌ๋‹‰์ด๋‹ค. ๊ธฐ๋ณธ ์›๋ฆฌ{1, 2, 3, 4, 5}๋ผ๋Š” ์ง‘ํ•ฉ์ด ์žˆ๊ณ  ์ด ์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.{1}, {2}, ..., {1, 2}, ..., {1, 2, 5}, ..., {1, 2, 3, 4, 5} ๋ฌผ๋ก  ๊ฐ„๋‹จํžˆ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.ํ•˜์ง€๋งŒ ๋น„ํŠธ ๋งˆ์Šคํ‚น์„ ํ•˜๋ฉด ๊ฐ ์š”์†Œ๋ฅผ ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•˜์—ฌ ํšจ์œจ์ ์ธ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.{1, 2, 3, 4, 5} → 11111{2, 3, 4, 5} → 11110{1, 2, 5} → 10011{2} → 00010 1) ์‚ฝ์ž…i๋ฒˆ ์งธ ๋น„ํŠธ ๊ฐ’์„ 1๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋•Œ OR ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•œ๋‹ค.i = 3์ผ ๋•Œ, 10101 | (1 → 10101 | 01000 → 11101 2) ์‚ญ์ œi..