[C++] ๋ˆ„์  ํ•ฉ(Prefix sum)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
๋ˆ„์  ํ•ฉ(Prefix sum) ๊ณ„์‚ฐ ์–‘์„ ์ค„์—ฌ์„œ ์‹œ๊ฐ„์ ์œผ๋กœ ๋งŽ์€ ์ด๋“์„ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. 1. ๊ธฐ๋ณธ ์›๋ฆฌ 1) 1์ฐจ์› ๋ฐฐ์—ด 1์ฐจ์› ๋ฐฐ์—ด์—์„œ i๋ฒˆ์งธ๋ถ€ํ„ฐ j๋ฒˆ์งธ ์ธ๋ฑ์Šค๊นŒ์ง€ k๋ฅผ ๋”ํ•œ ๊ฒƒ์„ ๊ธฐ๋กํ•˜๋ ค๋ฉด, ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์˜ i๋ฒˆ์งธ ์ธ๋ฑ์Šค์— k๋ฅผ ๋”ํ•˜๊ณ  j+1๋ฒˆ์งธ ์ธ๋ฑ์Šค์— k๋ฅผ ๋นผ๋ฉด ๋œ๋‹ค. ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ๊ธฐ์กด ๋ฐฐ์—ด ํฌ๊ธฐ๋ณด๋‹ค ํ•˜๋‚˜ ์ด์ƒ ํฌ๊ฒŒ ๋งŒ๋“ ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํฌ๊ธฐ๊ฐ€ 5์ธ ๋ฐฐ์—ด์—์„œ 0๋ฒˆ์งธ๋ถ€ํ„ฐ 2๋ฒˆ์งธ ์ธ๋ฑ์Šค๊นŒ์ง€ N์„ ๋นผ๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ˆ„์  ํ•ฉ ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค. { -N, 0, 0, N, 0, 0 } ์œ„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ 0๋ฒˆ์งธ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ ๋ˆ„์  ํ•ฉ์„ ๊ณ„์‚ฐํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ถ”๊ฐ€๋กœ 1๋ฒˆ์งธ๋ถ€ํ„ฐ 2๋ฒˆ์งธ ์ธ๋ฑ์Šค๊นŒ์ง€ M์„ ๋”ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋ˆ„์  ํ•ฉ ๋ฐฐ์—ด์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•œ๋‹ค. { -N, -M, 0, N, M..
[C++] ์ค‘๊ฐ„์—์„œ ๋งŒ๋‚˜๊ธฐ(Meet In The Middle)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
์ค‘๊ฐ„์—์„œ ๋งŒ๋‚˜๊ธฐ(Meet In The Middle) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์™„์ „ ํƒ์ƒ‰์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ, ํƒ์ƒ‰์˜ ๋ฒ”์œ„๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ์—ฐ์‚ฐ๋Ÿ‰์ด ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ ์ค‘๊ฐ„์—์„œ ๋งŒ๋‚˜๊ธฐ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด, ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ œ๊ณฑ๊ทผ๋งŒํผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ์ค‘๊ฐ„์—์„œ ๋งŒ๋‚˜๊ธฐ ๋ฐฉ์‹์€ ์•ž์ชฝ๊ณผ ๋’ค์ชฝ์—์„œ ์ ˆ๋ฐ˜์”ฉ ์ ‘๊ทผํ•˜์—ฌ ์ค‘๊ฐ„์—์„œ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋งŒ๋‚˜๊ฒŒ ํ•˜๋Š” ํƒ์ƒ‰ ๊ธฐ์ˆ ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ์ค‘๊ฐ„์—์„œ ๋งŒ๋‚œ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์ณ ์ „์ฒด ๊ฒฐ๊ณผ๋ฅผ ๋ฝ‘์•„๋‚ด๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌธ์ œ https://www.acmicpc.net/problem/1208 1208๋ฒˆ: ๋ถ€๋ถ„์ˆ˜์—ด์˜ ํ•ฉ 2 ์ฒซ์งธ ์ค„์— ์ •์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” N๊ณผ ์ •์ˆ˜ S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 40, |S| ≤ 1,000,000) ๋‘˜์งธ ์ค„์— N๊ฐœ์˜ ์ •์ˆ˜๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ..
[C++] ๋ฌธ์ž์—ด
ยท
๐Ÿ“ Computer Science/โœ Algorithm
๋ฌธ์ž์—ด 1. KMP ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. 1) ๊ธฐ๋ณธ ์›๋ฆฌ ์ ‘๋‘์‚ฌ(prefix)์™€ ์ ‘๋ฏธ์‚ฌ(suffix)๋ฅผ ์ด์šฉํ•ด pi[i] ๋ฐฐ์—ด์„ ๊ตฌํ•œ ๋’ค ํ™œ์šฉํ•œ๋‹ค. pi[i] ๋ฐฐ์—ด์€ 0~i๊นŒ์ง€์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์—์„œ prefix=suffix๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฒƒ์˜ ๊ธธ์ด์ด๋‹ค. ์ด๋•Œ, prefix๊ฐ€ 0~i๊นŒ์ง€์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์œผ๋ฉด ์•ˆ ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธ์ž์—ด ABAABAB๋กœ pi[i] ๋ฐฐ์—ด์„ ๊ตฌํ•ด๋ณด์ž. i ๋ถ€๋ถ„ ๋ฌธ์ž์—ด (0~i) pi[i] 0 A 0 1 AB 0 2 ABA 1 3 ABAA 1 4 ABAAB 2 5 ABAABA 3 6 ABAABAB 2 ๊ทธ๋ ‡๋‹ค๋ฉด ์ด pi[i] ๋ฐฐ์—ด์„ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰์„ ํšจ์œจ์ ์œผ๋กœ ํ•  ๊ฒƒ์ธ๊ฐ€? ๋ฌธ์ž์—ด ABCDABCDABEE์—์„œ ๋ฌธ์ž..
[C++] ๋„คํŠธ์›Œํฌ ์œ ๋Ÿ‰(Network Flow)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
๋„คํŠธ์›Œํฌ ์œ ๋Ÿ‰(Network Flow) ๊ทธ๋ž˜ํ”„ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ ๋„คํŠธ์›Œํฌ ์œ ๋Ÿ‰์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„  ๋จผ์ € ์ƒˆ๋กœ์šด ์šฉ์–ด์™€ ์œ ๋Ÿ‰ ๊ทธ๋ž˜ํ”„์˜ ํŠน์ง•๋ถ€ํ„ฐ ์•Œ์•„์•ผ ํ•œ๋‹ค. ์œ ๋Ÿ‰ ๊ทธ๋ž˜ํ”„๋Š” ๋ณดํ†ต ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„  ๊ฑฐ๋ฆฌ, ์‹œ๊ฐ„์ด๋‚˜ ๊ฐ€์ค‘์น˜ ๋Œ€์‹  ์šฉ๋Ÿ‰(Capacity)์ด๋ผ ํ•œ๋‹ค. ๋‘ ์ •์  u, v๋ฅผ ์žˆ๋Š” ๊ฐ„์„  (u, v)๊ฐ€ ์žˆ์„ ๋•Œ, u์—์„œ v๋กœ ๊ฐ„์„ ์˜ ์šฉ๋Ÿ‰ ์ดํ•˜๋งŒํผ์˜ ์œ ๋Ÿ‰(flow)์„ ํ˜๋ ค๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜ํ”„ ๋‚ด ์„œ๋กœ ๋‹ค๋ฅธ ์†Œ์Šค(S, Source) ์ •์ ๊ณผ ์‹ฑํฌ(T, Sink) ์ •์ ์ด ์žˆ๋Š”๋ฐ, ์†Œ์Šค ์ •์ ์€ ์œ ๋Ÿ‰์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์†Œ์Šค ์ •์  ์™ธ ์ •์ ๋“ค์€ ์ž์‹ ์ด ๋ฐ›์€ ์œ ๋Ÿ‰๋งŒํผ๋งŒ ๋‹ค์‹œ ํ˜๋ ค๋ณด๋‚ธ๋‹ค. ๊ฐ ๊ฐ„์„ ์— ํ๋ฅด๋Š” ์œ ๋Ÿ‰์€ ๊ทธ ๊ฐ„์„ ์˜ ์šฉ๋Ÿ‰์„ ๋„˜์„ ์ˆ˜ ์—†๋‹ค. ๊ฐ„์„  (u, v)๋กœ ์œ ๋Ÿ‰์ด ํ๋ฅด๊ณ  ์žˆ๋‹ค๋ฉด ์—ญ๋ฐฉํ–ฅ์ธ ๊ฐ„์„ (v,..
[C++] ํฌ์†Œ ํ…Œ์ด๋ธ”(Sparse Table)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
ํฌ์†Œ ํ…Œ์ด๋ธ”(Sparse Table) ๋ฐฐ์—ด์ด ์ •์ ์ด์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด ๋‚ด์šฉ์ด ์ˆ˜์ •๋˜๋ฉด ์•ˆ ๋œ๋‹ค. ๋ฐฐ์—ด์˜ ์•„์ด๋””์–ด๋Š” ๋ถ„ํ•  ์ •๋ณต๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋” ๋น ๋ฅด๋‹ค. ๊ธฐ๋ณธ ์›๋ฆฌ ๋ชจ๋“  ์ •์ ์˜ ๊ฐ„์„ ์ด 1๊ฐœ์ธ ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„๊ฐ€ ์กด์žฌํ•  ๋•Œ ์–ด๋–ค ์ •์ ์—์„œ ์‹œ์ž‘ํ•ด k๋ฒˆ ์ด๋™์„ ํ•˜๋ฉด ๋„์ฐฉํ•˜๋Š” ์ ์€ ์œ ์ผํ•˜๋‹ค. ์ด๋•Œ k๋ฒˆ์„ ์ผ์ผ์ด ๋งค๋ฒˆ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๋„์ฐฉ์ ์„ ๊ณ„์‚ฐํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ k๊ฐ’์ด ์ปค์งˆ์ˆ˜๋ก ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ์–ด๋–ค ์ •์ ์˜ n๋ฒˆ ์ด๋™ํ–ˆ์„ ๋•Œ ๋„์ฐฉ์ , ๋˜ ๊ทธ ๋„์ฐฉ์ ์„ ์ •์ ๋งˆ๋‹ค ๋‹ค ๊ธฐ์–ตํ•˜๋Š” ๋ฐฐ์—ด์ด ์žˆ๋‹ค๋ฉด ๋„์ฐฉ์ ์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋ฐฐ์—ด์€ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์•ผ ํ• ๊นŒ? 1์นธ, 2์นธ, 4์นธ, 8์นธ, 16์นธ,... ๋“ฑ 2์ง„์ˆ˜๋ฅผ ์ด์šฉํ•ด 2์ง„์ˆ˜์— ํ•ด๋‹นํ•˜๋Š” ์ด๋™ ๊ฐ’์„ ๋ชจ๋‘ ๋ฐฐ์—ด๋กœ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋™ ํšŸ์ˆ˜ k๋ฅผ 2..
[C++] ์œ„์ƒ ์ •๋ ฌ(Topological Sort)
ยท
๐Ÿ“ Computer Science/โœ Algorithm
์œ„์ƒ ์ •๋ ฌ(Topological Sort) ์œ„์ƒ ์ •๋ ฌ์€ ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ์ž‘์—…์„ ์ฐจ๋ก€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋•Œ ๊ทธ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ต์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. DAG(Directed Acyclic Graph)์—๋งŒ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์Šคํƒ๊ณผ ํ๋กœ ๊ตฌํ˜„๋œ๋‹ค. ๊ธฐ๋ณธ ์›๋ฆฌ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ์ •์ ์„ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค. ํ์—์„œ ์›์†Œ๋ฅผ ๊บผ๋‚ด ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๊ฐ„์„ ์„ ์ œ๊ฑฐ ํ›„ ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋œ ์ •์ ์„ ํ์— ์‚ฝ์ž…ํ•œ๋‹ค. ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ 2๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋ชจ๋“  ์›์†Œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ธฐ ์ „์— ํ๊ฐ€ ๋นˆ๋‹ค๋ฉด ์‚ฌ์ดํด์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋ชจ๋“  ์›์†Œ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ํ์—์„œ ๊บผ๋‚ธ ์ˆœ์„œ๊ฐ€ ์œ„์ƒ ์ •๋ ฌ์˜ ๊ฒฐ๊ณผ์ด๋‹ค. ๋ฌธ์ œ https://www.acmicpc.net/problem/1766 1766๋ฒˆ: ๋ฌธ์ œ์ง‘ ์ฒซ์งธ ์ค„์— ๋ฌธ์ œ์˜ ์ˆ˜ N(1 ..