๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ชฉ๋ก๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (72)

๐Ÿ’ป๐Ÿ’ญ๐ŸŽง๐ŸŒ

์šฐ์„ ์ˆœ์œ„ ํ (Priority Queue)

์šฐ์„ ์ˆœ์œ„ ํ๋ž€? ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ์‚ญ์ œํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•จ. ๊ตฌํ˜„ ํ•˜๋Š” ๋ฐฉ๋ฒ• 1) ๋‹จ์ˆœํžˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ 2) ํž™(heap)์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ ์šฐ์„  ์ˆœ์œ„ ํ ๊ตฌํ˜„ ๋ฐฉ์‹ ์‚ฝ์ž… ์‹œ๊ฐ„ ์‚ญ์ œ ์‹œ๊ฐ„ ๋ฆฌ์ŠคํŠธ O(1) O(N) ํž™(Heap) O(logN) O(logN) ๋‹จ์ˆœํžˆ N๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํž™์— ๋„ฃ์—ˆ๋‹ค๊ฐ€ ๋ชจ๋‘ ๊บผ๋‚ด๋Š” ์ž‘์—…์€ ์ •๋ ฌ๊ณผ ๋™์ผํ•˜๋‹ค. ์ด ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(NlogN) ํž™(Heap)์˜ ํŠน์ง• ํž™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ผ์ข…์ด๋‹ค. ํž™์—์„œ๋Š” ํ•ญ์ƒ ๋ฃจํŠธ ๋…ธ๋“œ(root node)๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ์ตœ์†Œ ํž™(min heap) ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค ๋”ฐ๋ผ์„œ ๊ฐ’์ด ์ž‘์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ์ œ๊ฑฐ๋œ๋‹ค. ์ตœ๋Œ€ ํž™(max he..

BOJ 10844 : ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜ (Python)

๋ฌธ์ œ 45656์ด๋ž€ ์ˆ˜๋ฅผ ๋ณด์ž. ์ด ์ˆ˜๋Š” ์ธ์ ‘ํ•œ ๋ชจ๋“  ์ž๋ฆฌ์˜ ์ฐจ์ด๊ฐ€ 1์ด๋‹ค. ์ด๋Ÿฐ ์ˆ˜๋ฅผ ๊ณ„๋‹จ ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค. N์ด ์ฃผ์–ด์งˆ ๋•Œ, ๊ธธ์ด๊ฐ€ N์ธ ๊ณ„๋‹จ ์ˆ˜๊ฐ€ ์ด ๋ช‡ ๊ฐœ ์žˆ๋Š”์ง€ ๊ตฌํ•ด๋ณด์ž. 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ˆ˜๋Š” ๊ณ„๋‹จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ์ถœ๋ ฅ ์ฒซ์งธ ์ค„์— ์ •๋‹ต์„ 1,000,000,000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ํ’€์ด dp[์ž๋ฆฟ์ˆ˜][์•ž์— ์˜ค๋Š” ์ˆซ์ž] = ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ž๋ฆฟ์ˆ˜๊ฐ€ 1์ผ ๋•Œ์—๋Š” ์•ž์— ์˜ค๋Š” ์ˆซ์ž๊ฐ€ 1์—์„œ 9์ธ ๊ฒฝ์šฐ๋Š” ํ•˜๋‚˜๋ฟ์ด๋ฏ€๋กœ for๋ฌธ์„ ์ด์šฉํ•ด 1์„ ๋„ฃ์–ด์ค€๋‹ค. (์ž๋ฆฌ์ˆ˜๊ฐ€ 1์ผ ๋•Œ ์•ž์— ์˜ค๋Š” ์ˆซ์ž๊ฐ€ 0์ธ ๊ฒฝ์šฐ๋Š” ์—†์œผ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ 0์œผ๋กœ ๋‘”๋‹ค.) ์•ž์— ์˜ค๋Š” ์ˆซ์ž๊ฐ€ 0 ์ธ ๊ฒฝ์šฐ์—๋Š” ๊ทธ ๋’ค์— 1๋งŒ ์˜ฌ ์ˆ˜ ์žˆ๊ณ , ์•ž์— ์˜ค๋Š” ์ˆซ์ž๊ฐ€ 9์ธ..

BOJ 1149 : RGB ๊ฑฐ๋ฆฌ (Python)

๋ฌธ์ œ RGB๊ฑฐ๋ฆฌ์—๋Š” ์ง‘์ด N๊ฐœ ์žˆ๋‹ค. ๊ฑฐ๋ฆฌ๋Š” ์„ ๋ถ„์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ณ , 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ N๋ฒˆ ์ง‘์ด ์ˆœ์„œ๋Œ€๋กœ ์žˆ๋‹ค. ์ง‘์€ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘ ์ค‘ ํ•˜๋‚˜์˜ ์ƒ‰์œผ๋กœ ์น ํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์•„๋ž˜ ๊ทœ์น™์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ๋ชจ๋“  ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด๋ณด์ž. 1๋ฒˆ ์ง‘์˜ ์ƒ‰์€ 2๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. N๋ฒˆ ์ง‘์˜ ์ƒ‰์€ N-1๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. i(2 ≤ i ≤ N-1)๋ฒˆ ์ง‘์˜ ์ƒ‰์€ i-1๋ฒˆ, i+1๋ฒˆ ์ง‘์˜ ์ƒ‰๊ณผ ๊ฐ™์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ์ง‘์˜ ์ˆ˜ N(2 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ์ง‘์„ ๋นจ๊ฐ•, ์ดˆ๋ก, ํŒŒ๋ž‘์œผ๋กœ ์น ํ•˜๋Š” ๋น„์šฉ์ด 1๋ฒˆ ์ง‘๋ถ€ํ„ฐ ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง„๋‹ค. ์ง‘์„ ์น ํ•˜๋Š” ๋น„์šฉ์€ 1,000๋ณด๋‹ค ..

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Dynamic Programming)

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ํšจ์œจ์„ฑ์„ ๋น„์•ฝ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ(์ž‘์€ ๋ฌธ์ œ)๋Š” ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ €์žฅํ•˜์—ฌ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ตฌํ˜„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. Top-down (ํ•˜ํ–ฅ์‹) Botton-up (์ƒํ–ฅ์‹) ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋™์  ๊ณ„ํš๋ฒ•์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ถ„์•ผ์—์„œ์˜ ๋™์ (Dynamic) ์˜๋ฏธ์™€ ์ฐจ์ด์  ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋™์  ํ• ๋‹น(Dynamic Allocation)์€ 'ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์— ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋ฒ•' ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ '๋‹ค์ด๋‚˜๋ฏน'์€ ๋ณ„๋‹ค๋ฅธ ์˜๋ฏธ๊ฐ€ ์—†์Œ - ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ (Optimal Substructure) : ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘..