๐Ÿ‘จโ€๐Ÿ’ป Seungineer's GitHub Contribution

๐Ÿงญ KAIST JUNGLE/Algorithm 15

[SW ์ •๊ธ€ 25์ผ์ฐจ] '์ปดํ“จํŒ… ์‚ฌ๊ณ ๋กœ์˜ ์ „ํ™˜' ๋! โžก๏ธ 'ํƒํ—˜ ์ค€๋น„' ์‹œ์ž‘!

Week 1 ~ 3, '์ปดํ“จํŒ… ์‚ฌ๊ณ ๋กœ์˜ ์ „ํ™˜'์ด ๋งˆ๋ฌด๋ฆฌ ๋˜์—ˆ๋‹ค. ๋ฐœ์ œ๋ช…๊ณผ ๊ฐ™์ด ๊ธฐ์กด ์‚ฌ๊ณ  ๋ฐฉ์‹์„ ์ปดํ“จํŒ…๊ณผ ๋™์ผํ•œ ์‚ฌ๊ณ  ๋ฐฉ์‹์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ™œ์šฉํ•˜์˜€๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์ด์ฌ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ง ๋‹ค. ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉฐ ๋‚ด๊ฐ€ ์‚ฌ๊ณ ํ•˜๋Š” ๋ฐฉ์‹์„ ์ปดํ“จํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹๋Œ€๋กœ ๋™๊ธฐํ™”ํ•˜๋Š” ์ฃผ์ฐจ์˜€๋‹ค. 3์ฃผ๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋“ค์„ ์ปดํ“จํ„ฐ์—๊ฒŒ ํ•ด๊ฒฐ์‹œ์ผœ(?) ๋ณธ ๊ฒฐ๊ณผ ์–ด๋Š์ •๋„ ์‚ฌ๊ณ  ๋ฐฉ์‹์ด ๋™๊ธฐํ™”๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค(์•„์ฃผ ์กฐ๊ธˆ). ๋‹ค๋งŒ, ์•„์ง๋„ time, space complexity ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์„ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชป ํ•˜๊ณ  ์žˆ๋‹ค. ์กฐ๊ธˆ ๋” ๊ณต๋ถ€ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ๋˜ํ•œ ๋ฐฑ์ค€์— ์•„์ง ์ ‘๊ทผํ•ด๋ณด์ง€ ๋ชป ํ•œ ๋ฌธ์ œ๋“ค์ด ๋งŽ์ด ๋‚จ์•„ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ๊ฒฝํ—˜ํ•ด๋ณด๋ฉด์„œ ๋” ๋Šฅ์ˆ™ํ•˜๊ฒŒ ์ปดํ“จํ„ฐ์—๊ฒŒ ์ผ์„..

[SW ์ •๊ธ€ 21์ผ์ฐจ] ๊ท€๋‚ฉ์  ์‚ฌ๊ณ (#DP #๋ฐฑ์ค€ 9084 #๋ฐฑ์ค€ 2294)

์žฌ๊ท€์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉด์„œ '์ ˆ์ฐจ์ง€ํ–ฅ์  ์‚ฌ๊ณ '๊ฐ€ ์•„๋‹Œ '๊ท€๋‚ฉ์  ์‚ฌ๊ณ '๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๋Š” ์–˜๊ธธ ๋“ค์—ˆ๋‹ค. ๊ทธ ๋‹น์‹œ์— ์–ด๋ ดํ’‹์ด ์ดํ•ดํ–ˆ๋˜ ๋ถ€๋ถ„์ด ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ข€ ๋” ์„ ๋ช…ํžˆ ์ดํ•ด๊ฐ€ ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„ ๊ธฐ๋กํ•ด๋‘๊ณ ์ž ํ•œ๋‹ค. ๋ฐฑ์ค€ 9084 ์ด ๋ฌธ์ œ๋Š” ๋™์ „์˜ type์ด ์ฃผ์–ด์งˆ ๋•Œ ์ฃผ์–ด์ง„ ๊ธˆ์•ก์„ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋™์ „์˜ ์ตœ๋Œ€, ์ตœ์†Œ ๊ฐœ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ํ•ฉํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ฃผ์–ด์ง„ ๊ธˆ์•ก์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ ˆ์ฐจ๋Œ€๋กœ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋ฉด ๋ณต์žกํ•˜๋‹ค. ๋˜ํ•œ '์ค‘๋ณต ๋ถ€๋ถ„ ๋ฌธ์ œ'๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ DP๋ฅผ ํ™œ์šฉํ•ด๋ณธ๋‹ค. 1. ํ…Œ์ด๋ธ” ์ •์˜ํ•˜๊ธฐ dp[i] ๋Š” 'i๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋กœ ์ •์˜ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ •์˜ํ•ด๋ณธ ์ด์œ ๋Š” ๊ฐ„๋‹จํžˆ dp[์ฃผ์–ด์ง„ ๊ธˆ์•ก] ํ•˜๋ฉด ์ •๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๊ธฐ ..

[SW ์ •๊ธ€ 20์ผ์ฐจ] ๋ฐ˜๋ก€๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ..! ์—†์—ˆ๋‹ค (๋ฐฑ์ค€1931 ํŒŒ์ด์ฌ)

๋ฐฑ์ค€ 1931 ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ 85%์—์„œ 'ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค'๊ฐ€ ๋‚˜์™”๊ณ , ํ‹€๋ฆฌ๊ฒŒ ๋งŒ๋“  ์ผ€์ด์Šค์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผ์„ ํ•˜์˜€๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๋ฐ˜๋ก€๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•œ ์ฝ”๋“œ๋ฅผ ์ œ์ถœํ•˜์—ฌ '๋งž์•˜์Šต๋‹ˆ๋‹ค'๊ฐ€ ๋‚˜์™”๋‹ค. ์ œ์ถœ ์ดํ›„ ๋ฌธ๋“ ์ƒ๊ฐ๋‚œ ์ผ€์ด์Šค๊ฐ€ ์žˆ์–ด '๋งž์•˜์Šต๋‹ˆ๋‹ค'๊ฐ€ ๋‚˜์˜จ ์ฝ”๋“œ์— ๋„ฃ์–ด์„œ ํ…Œ์ŠคํŠธํ•ด ๋ณด์•˜๋‹ค. ์˜ˆ์ƒ ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅธ ๊ฐ’์„ ์ถœ๋ ฅํ–ˆ๋‹ค. ๋ฐฑ์ค€์—์„œ ๊ฒ€์ฆํ•˜์ง€ ์•Š์€ ์ผ€์ด์Šค์ธ ์ค„ ์•Œ์•˜์ง€๋งŒ, ๊ธ€์„ ์“ฐ๋ฉด์„œ ๋‚ด๊ฐ€ ์ƒ๊ฐ์„ ์ž˜๋ชปํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค... ๐Ÿ’ฉ ๊ทธ๋ž˜๋„ ์ž ๊น์ด๋‚˜๋งˆ ๋ฐฑ์ค€ ์‚ฌ์ดํŠธ์˜ '๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ์‚ฌ๋žŒ' ๋ฆฌ์ŠคํŠธ์— ์ด๋ฆ„์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‚˜ ํ–‰๋ณตํšŒ๋กœ๋ฅผ ๋Œ๋ ธ๊ธฐ์— ๊ธฐ๋กํ•ด๋‘๊ณ ์ž ํ•œ๋‹ค. ๋ฐฑ์ค€ 1931 ๋ฌธ์ œ ์š”์•ฝ ์ž…๋ ฅ๋˜๋Š” N๊ฐœ์˜ ํšŒ์˜ ์‹œ์ž‘, ๋ ์‹œ๊ฐ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์€ ํšŒ์˜๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ฌผ๋ก  ํšŒ์˜์‹ค์ด 1๊ฐœ์ด..

[SW ์ •๊ธ€ 19์ผ์ฐจ] ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋ถ„ํ• ์ •๋ณต๋ฒ•

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(DP)์€ 'ํฐ ๋ฌธ์ œ๋ฅผ '์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ๋‚˜์˜จ ํ•ด'๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ'์ด๋‹ค. ์ด๋Š” ๋ถ„ํ•  ์ •๋ณต๋ฒ•๊ณผ ์œ ์‚ฌํ•ด ๋ณด์ธ๋‹ค. ๋ถ„ํ•  ์ •๋ณต๋ฒ• ๋˜ํ•œ '์›๋ž˜ ๋ฌธ์ œ๋ฅผ ๋ช‡ ๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜๋ฉฐ ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๊ฒฐ'ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ฐพ์€ ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์›๋ž˜ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ์ฐพ๋Š”๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด DP์™€ ์ฐจ์ด์ ์€? DP๋Š” ๋ฌธ์ œ์— ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(optimal substructure)์™€ ์ค‘๋ณต ๋ถ€๋ถ„ ๋ฌธ์ œ(overlapping subproblems)๊ฐ€ ์žˆ์„ ๋•Œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ๋ž€, ๋ถ€๋ถ„ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๊ฐ€ ์›๋ž˜ ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด ์†์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ค‘๋ณต ๋ถ€๋ถ„ ๋ฌธ์ œ๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•ด ๊ฐ€๋Š” ๊ณผ์ •์—์„œ ์ค‘๋ณต๋˜๋Š”(=๋™์ผํ•œ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ) ๊ฐ’์„ ๋ฐ˜๋ณตํ•ด์„œ ํ’€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์œ„ ๊ทธ๋ฆผ์€ ๋ถ„ํ•  ..

[SW ์ •๊ธ€ 16์ผ์ฐจ] list๋ฅผ ํ• ๋‹น ํ›„ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ, ์›๋ณธ์ด ๋ฐ”๋€Œ์–ด์š” (#mutablle๊ฐ์ฒด #python)

python์„ ํ†ตํ•ด ํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ž์ฃผ ์žˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด (์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์—)๋ณต์‚ฌ๋˜์—ˆ๋‹ค๊ณ  ์ฐฉ๊ฐํ•  ๋•Œ, ์˜ˆ์ƒ๊ณผ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค. ์•„๋ž˜ ์ผ€์ด์Šค๋Š” ์ฐฉ๊ฐํ•˜๊ฒŒ ๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์ด๋‹ค. list1 = [1, 2, 3, 4] list2 = list1 # list1์„ list2์— '๋ณต์‚ฌ' # list2 ์ˆ˜์ • list2[1] = 100 list2.append(5) # list2 ์ถœ๋ ฅ print(list2) # [1, 100, 3, 4, 5] # list1์€ ๊ทธ๋Œ€๋กœ๊ฒ ์ง€? print(list1) # [1, 100, 3, 4, 5] ๐Ÿค” list2๋ฅผ ์ˆ˜์ •(์กฐ์ž‘)ํ–ˆ๋Š”๋ฐ, list1์ด ๋™์ผํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. ์˜๋„ํ•œ ๊ฒƒ์ด ์•„๋‹ ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ž‘๋™ ๋˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค. pyth..