๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํ‹ฐ์ปค ๋ชจ์œผ๊ธฐ(2)

by Fomagran ๐Ÿ’ป 2021. 10. 19.
728x90
๋ฐ˜์‘ํ˜•

 

Problem

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์Šคํ‹ฐ์ปค ๋ชจ์œผ๊ธฐ(2)

N๊ฐœ์˜ ์Šคํ‹ฐ์ปค๊ฐ€ ์›ํ˜•์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ทธ๋ฆผ์€ N = 8์ธ ๊ฒฝ์šฐ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์›ํ˜•์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์Šคํ‹ฐ์ปค์—์„œ ๋ช‡ ์žฅ์˜ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋‚ด์–ด ๋œฏ์–ด๋‚ธ ์Šคํ‹ฐ์ปค์— ์ ํžŒ ์ˆซ์ž์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ€ ๋˜๋„๋ก

programmers.co.kr


Solution

ํ•ด๋‹น ๋ฌธ์ œ๋Š” DP(Dynamic Programming)์œผ๋กœ ํ’€์–ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

1. ์Šคํ‹ฐ์ปค์˜ ๊ฐฏ์ˆ˜๊ฐ€ 3๊ฐœ ์ดํ•˜๋ผ๋ฉด ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์Šคํ‹ฐ์ปค์˜ ๊ฐฏ์ˆ˜๊ฐ€ 3๊ฐœ ์ดํ•˜๋ผ๋ฉด ํ•˜๋‚˜๋ฐ–์— ๋—„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

if sticker.count < 4 { return sticker.max()!}

 

2. ์ฒซ ๋ฒˆ์งธ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋ƒˆ์„ ๊ฒฝ์šฐ์™€ ๋‘ ๋ฒˆ์งธ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋ƒˆ์„ ๊ฒฝ์šฐ์˜ dp๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

 var dp1:[Int] = [sticker[0],sticker[0]]
 var dp2:[Int] = [0,sticker[1]]

 

3. ์ด์ „์— ์Œ“์ธ ํ•ฉ์„ ์ด์šฉํ•ด ๋” ์ข‹์€ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋ƒ…๋‹ˆ๋‹ค.

 

๋” ์ข‹์€ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋‚ด๊ธฐ ์œ„ํ•œ ์‹์€ max(dp[i-2] + sticker[i] ์™€ dp[i-1]) ์ž…๋‹ˆ๋‹ค.

 

์ด์œ ๋Š” ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์€ ํ˜„์žฌ ์œ„์น˜์—์„œ 2์นธ ์•ž ์Šคํ‹ฐ์ปค์™€ 3์นธ ์•ž ์Šคํ‹ฐ์ปค์ž…๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ [14, 6, 5, 11, 3, 9, 2, 10] ์ด๋ ‡๊ฒŒ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  0๋ฒˆ์งธ ์Šคํ‹ฐ์ปค์ธ 14๋ฅผ ๋œฏ์–ด๋ƒˆ์„ ๋•Œ

 

2์นธ ์•ž ์Šคํ‹ฐ์ปค๋Š” 5์™€ 3์นธ ์•ž ์Šคํ‹ฐ์ปค๋Š” 11์ž…๋‹ˆ๋‹ค.

 

5์™€ 11 ์ค‘ ๋‹น์—ฐํžˆ 11์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งŒ์•ฝ 11์˜†์— 1000์ด๋ผ๋Š” ์ˆซ์ž๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

 

11์„ ๋œฏ์–ด๋ƒ„์œผ๋กœ์จ 1000์„ ์žƒ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ณ ๋กœ 5๋ฅผ ๋œฏ์–ด๋‚ด๊ณ  ๊ทธ ๋‹ค์Œ 1000์„ ๋”ํ–ˆ์„ ๋•Œ์™€ 11์„ ๋œฏ์–ด๋‚ด๊ณ  ๊ทธ ๋‹ค์Œ ์ˆซ์ž๋ฅผ ๋œฏ์–ด๋ƒˆ์„ ๋–„ ์ด๋ ‡๊ฒŒ 2์ˆ˜ ์•ž์„ ๋‚ด๋‹ค๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ณ ๋กœ ์œ„์™€ ๊ฐ™์€ ์‹์ด ์„ฑ๋ฆฝ๋˜๋Š” ๊ฒƒ์ด์ฃ .

 

for i in 2..<sticker.count {
        dp1.append(max(dp1[i-2]+sticker[i],dp1[i-1]))
        dp2.append(max(dp2[i-2]+sticker[i],dp2[i-1]))
    }

 

4. ์ฒซ ๋ฒˆ์งธ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋ƒˆ์„ ๋•Œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ์‚ญ์ œํ•ด์ค€๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋ƒˆ์„ ๋• ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์Šคํ‹ฐ์ปค๋„ ๋œฏ์–ด์ง€๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ์‚ญ์ œํ•ด์ค๋‹ˆ๋‹ค.

 

dp1.removeLast()

 

5. ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋ƒˆ์„ ๋•Œ์™€ ๋‘ ๋ฒˆ์งธ ์Šคํ‹ฐ์ปค๋ฅผ ๋œฏ์–ด๋ƒˆ์„ ๋•Œ์˜ ๊ฐ’๋“ค ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

return max(dp1.max()!,dp2.max()!)

Source Code

 


๋Š๋‚€์ 

 

๋‚œ ์—ญ์‹œ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋„ˆ๋ฌด ์•ฝํ•˜๋‹ค...

 

์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผํ• ์ง€๋„ ๊ฐ์ด ์•ˆ์™”๊ณ ... ๊ฒฐ๊ตญ ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด๋ฅผ ๋ดค๋Š”๋ฐ ํ’€์ด๋ฅผ ๋ด๋„ ์ดํ•ดํ•˜๋Š”๋ฐ ์ข€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค...

 

์‹œ๊ฐ„ ๋‚จ์„ ๋•Œ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋งŒ ๋นก์„ธ๊ฒŒ ์ค€๋น„ํ•ด์•ผ๊ฒ ๋‹ค..

 

์•„ ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฌธ์ œ๊ฐ€ ์›๋ž˜ 4๋‹จ๊ณ„์˜€๋Š”๋ฐ 3๋‹จ๊ณ„๋กœ ๋‚ด๋ ค์˜จ๊ฑฐ ๊ฐ™๋‹ค... ๋‹ค๋ฅธ ๋ถ„๋“ค์„ ๋‹ค 4๋‹จ๊ณ„๋ผ๊ณ  ํ•˜์…จ๋„ค..

 

์–ด์ฉ์ง€ ์–ด๋ ต๋”๋ผ..

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€