์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ“š 16

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งค ์ˆœ๊ฐ„์— ๊ฐ€์žฅ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•ด ๋‹ต์„ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์กฐ๊ฑด: ๋งค ์ˆœ๊ฐ„์—์„œ์˜ ์ตœ์„ ์˜ ์„ ํƒ = ๋ฌธ์ œ์—์„œ์˜ ์ตœ์ ํ•ด์ ‘๊ทผ ๋ฐฉ์‹์— ๊ฐ€๊นŒ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž„ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ โŒ ๋งค ์ˆœ๊ฐ„์—์„œ์˜ ์ตœ์„ ์˜ ์„ ํƒ ≠ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด→ ์ˆ˜ํ•™์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ DP(์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๐šถโจ๐šดโฉ์ž„)๋ฅผ ์ด์šฉ ์‹ค์ œ ๋ฌธ์ œ์—์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งค ์ˆœ๊ฐ„์—์„œ์˜ ์ตœ์„ ์˜ ์„ ํƒ = ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด ๋ฅผ ๋งŒ์กฑํ•˜๋Š”์ง€ ํŒ๋‹จํ•  ๊ฒƒ๋•Œ์— ๋”ฐ๋ผ, ์œ„์˜ ์กฐ๊ฑด์ด ๋งŒ์กฑํ•˜๋„๋ก ๋ฌธ์ œ๋ฅผ ์žฌํ•ด์„ ํ•˜๋Š” ๋Šฅ๋ ฅ๋„ ํ•„์š”๋งŒ์•ฝ, ์žฌํ•ด์„์„ ํ•ด๋„ ๊ทธ๋ฆฌ๋””๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ๋– ์˜ฌ๋ ค์•ผ ํ•จ(๋ธŒ๋ฃจํŠธํฌ์Šค or DP or ์ˆ˜ํ•™)Tip! ์ •๋ ฌ๊ณผ ๊ทธ๋ฆฌ๋””๋Š” ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์–ด๋–ค ๊ธฐ์ค€์— ๋Œ€ํ•ด ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์€ ์ˆœ์„œ๋กœ ์›์†Œ๋ฅผ ์žฌ๋ฐฐ์น˜(์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ etc.)์˜ค๋ฆ„์ฐจ์ˆœ: ์ž‘์€ ์ˆœ์œผ๋กœ ์ •๋ ฌ(ex: 1, 2, 3)๋‚ด๋ฆผ์ฐจ์ˆœ: ํฐ ์ˆœ์œผ๋กœ ์ •๋ ฌ(ex: 3, 2, 1) ์ข…๋ฅ˜๐‘ถ(๐‘ต²): ์„ ํƒ, ์‚ฝ์ž…, ๋ฒ„๋ธ”๐‘ถ(๐‘ตโฆ๐‘™๐‘œ๐‘”๐‘ต): ๋ณ‘ํ•ฉ, ํ€ตํŒŒ์ด์ฌ ์ •๋ ฌํ•จ์ˆ˜๋Š” ๋ณ‘ํ•ฉ ์ •๋ ฌํ•จ์ˆ˜ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ ํŒŒ์ด์ฌ์—์„œ ์ •๋ ฌํ•จ์ˆ˜sort() ํ•จ์ˆ˜: ๋ฆฌ์ŠคํŠธ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅsorted() ํ•จ์ˆ˜: iterableํ•œ ๋ชจ๋“  ๊ฒƒ(์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ)์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ๊ธฐ๋ณธ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์ž„๋ฆฌ์ŠคํŠธ๋กœ ํ˜• ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฉด sorted()ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ํ˜• ๋ณ€ํ™˜ํ•˜๋ฉด ํ‚ค๋งŒ ๋‹ด๊น€๋ฌธ์ž์—ด๋„ sorted()ํ•จ์ˆ˜ ์‚ฌ์šฉ ์ •๋ ฌ ๊ฐ€๋Šฅ(์ด๋•Œ, ๋ฌธ์ž์—ด์€ ์•„์Šคํ‚ค์ฝ”๋“œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ๋จ)reverse ์˜ต์…˜์„ False๋กœ ์„ค์ •..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์‚ดํŽด๋ณด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜100% ์ •๋‹ต์„ ๋„์ถœํ•ด๋‚ด์ง€๋งŒ ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆผ ๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ โญ•๏ธ์กฐ๊ฑด ์ˆ˜๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ(์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š์„ ์ •๋„๋กœ) ๋ธŒ๋ฃจํŠธ ํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•œ ๊ฒฝ์šฐ โŒ์กฐ๊ฑด์œผ๋กœ ๊ฑธ๋ฆฐ ์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฐ ๊ฒฝ์šฐ (์˜ˆ: 1,000,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์˜ ์†Œ์ˆ˜ ๊ฐœ์ˆ˜ ์ถœ๋ ฅ)๐‘ถ(๐‘ต²) ํ’€์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•ฝ 1์กฐ ๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚จ๋Œ€์‘: ์—ฌ๋Ÿฌ ์ˆ˜์— ๋Œ€ํ•œ ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜: ๐‘ถ(๐‘ต ๐‘™๐‘œ๐‘”(๐‘™๐‘œ๐‘”๐‘ต)์ตœ์•…์˜ ๊ฒฝ์šฐ์ธ ๐‘ต = 1,000,000 ์ธ ๊ฒฝ์šฐ์—๋„ ์•ฝ 500๋งŒ ๋ฒˆ์˜ ์—ฐ์‚ฐ ๋‚ด์— ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ ์‹ค์ œ ๋ฌธ์ œ์—์„œ ๋ธŒ๋ฃจํŠธ ํฌ์Šค ์ ์šฉ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ์—์„œ ์‚ฌ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ˆœ์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ & ์กฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ˆœ์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ˆœ์—ด์€ ์ˆœ์„œ ์žˆ์Œ → check๋ฐฐ์—ด(์›์†Œ์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€ ๋‚˜ํƒ€๋ƒ„)ํ•„์š”ํŒŒ์ด์ฌ Permutations ํ•จ์ˆ˜ํŒŒ์ด์ฌ itertools ๋ชจ๋“ˆ์— ํฌํ•จ๋œ ํ•จ์ˆ˜์ด๋ฉฐ ์ˆœ์—ด์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ํ•จ์ˆ˜Permutations(arr, num)arr: ๋ฐฐ์—ดNum: ๋ฝ‘์„ ๊ฐœ์ˆ˜(์•ˆ์จ์ฃผ๋ฉด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋งŒํผ ์„ ํƒํ•˜๊ฒŒ ๋จ)๋ฐ˜ํ™˜๊ฐ’์€ ๋ชจ๋“  ์ˆœ์—ด์„ ๋‹ด์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ list๋กœ ํ˜• ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉ ์กฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜N๊ฐœ์˜ ์›์†Œ ์ค‘์—์„œ r๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ ˆ ๋Œ€ํ•ด ์‚ดํŽด๋ณด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ํŒŒ์ด์ฌ combinations ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌํŒŒ์ด์ฌ itertools ๋ชจ๋“ˆ์— ํฌํ•จ๋œ ํ•จ์ˆ˜์ด๋ฉฐ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ํ•จ์ˆ˜Combinations(arr, num)arr: ๋ฐฐ์—ดNum: ๋ฝ‘์„ ๊ฐœ์ˆ˜๋ฐ˜ํ™˜๊ฐ’์€ ๋ชจ๋“  ์กฐํ•ฉ์„ ๋‹ด์€ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ list๋กœ ํ˜• ๋ณ€ํ™˜ํ•ด์„œ ์‚ฌ์šฉ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ˆ„์ ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ˆ„์ ํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜DP ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์†ํ•จ์ „์ฒ˜๋ฆฌ๋ฅผ ํ•œ ํ›„์—๋Š” 1์ฐจ์›ใƒป2์ฐจ์› ๋ฐฐ์—ด์˜ ํ•ฉ์„ ๐‘‚(๐Ÿ) ๋งŒ์— ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1์ฐจ์› ๋ฐฐ์—ด์—์„œ ๋ˆ„์ ํ•ฉ์Œ์ˆ˜ ์žˆ์–ด๋„ ์ž˜ ๋™์ž‘ํ•จDp ํ…Œ์ด๋ธ” ์„ค๊ณ„psum[n]: 1~n๋ฒˆ์งธ ์›์†Œ๊นŒ์ง€์˜ ํ•ฉ๊ด€๊ณ„์‹psum[n] = psum[n-1] + arr[n]a๋ถ€ํ„ฐ b๊นŒ์ง€ ์›์†Œ์˜ ํ•ฉ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•psum[b] - psum[a-1] 2์ฐจ์› ๋ฐฐ์—ด์—์„œ ๋ˆ„์ ํ•ฉ2์ฐจ์› ๋ฐฐ์—ด์˜ ์„ธ๋กœ ๊ธธ์ด๋ฅผ N, ๊ฐ€๋กœ ๊ธธ์ด๋ฅผ M์ด๋ผ๊ณ  ํ•  ๋•Œ, ๐‘‚(๐‘๐‘€) ์˜ ์ „์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋จDP ํ…Œ์ด๋ธ” ์„ค๊ณ„psun[n][m]: (1, 1)๋ถ€ํ„ฐ (n, m)๊นŒ์ง€์˜ 2์ฐจ์› ํ•ฉ๊ด€๊ณ„์‹psum[n][m] = (psum[n][m-1] + psum[n-1][m] - psum[n-1][m-1]) + arr[n](sy, sx)๋ถ€ํ„ฐ (ey, ex..