๐Ÿ‘ฉโ€๐ŸŽ“๊ณต๋ถ€ - 2024.01.24 ์˜ค๋Š˜์˜ ์ฝ”๋”ฉ๊ณต๋ถ€

์œ ๋ น๊ฐœยท2024๋…„ 1์›” 24์ผ
0

PS-์•Œ๊ณ ๋ฆฌ์ฆ˜2

๋ชฉ๋ก ๋ณด๊ธฐ
19/34
post-thumbnail

9095๋ฒˆ - 1,2,3 ๋”ํ•˜๊ธฐ

DP๋ฌธ์ œ์ธ๋ฐ ๊ทธ๋ƒฅ ์žฌ๊ท€๋กœ ํ’€์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค ํ•˜ํ•˜...

N = int(input())

์ž…๋ ฅ๋ฐ›์„ ํšŸ์ˆ˜๋ฅผ ๋ฐ›๊ณ 

for _ in range(N):
    cnt = 0
    ans = []    
    a = int(input())
    dp(0,a)
    print(cnt)

๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„ ์žฌ๊ท€๋ฅผ ๋Œ๋ ค์ค๋‹ˆ๋‹ค.

def dp(start,end):
    global cnt
    if start >= end:
        cnt += 1
        return 

๋งŒ์•ฝ start๋ณ€์ˆ˜๊ฐ€ end์™€ ๊ฐ™์•„์ง€๊ฑฐ๋‚˜ ๋” ์ปค์ง„๋‹ค๋ฉด cnt๋ฅผ ํ•˜๋‚˜ ์˜ฌ๋ฆฌ๊ณ  ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

    for i in range(1,4):
        if sum(ans) + i > end:
            continue

1,2,3์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ˆซ์ž๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”์ง€๊ฐ€ ๊ด€๊ฑด์ด๋ฏ€๋กœ 1~3๊นŒ์ง€ for๋ฌธ ์žฌ๊ท€๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ๋ฆฌ๋‹ค๊ฐ€ ๋งŒ์•ฝ ์ €์žฅํ•ด๋‘” ์ˆซ์ž(1,1,1...) + i(1or2or3) ์ด end๋ณด๋‹ค ์ปค์ง„๋‹ค๋ฉด continue๋ฅผ ์จ์„œ ํ•ด๋‹น for๋ฌธ์€ ์Šคํ‚ตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

        ans.append(i)

๋งŒ์•ฝ ๋”ํ•ด์„œ ์ปค์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด๋‹น ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด i๋ฅผ ans๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๊ณ 

        dp(start+i,end)

์žฌ๊ท€๋กœ ๋‹ค์‹œ ๋“ค์–ด๊ฐ€์„œ ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ฉ์ด 4๋ผ๋ฉด 1111 ๊ตฌํ•˜๊ณ 

        ans.pop()

pop ํ•ด์„œ 1112,1113,1114 ๋‹ค continue์— ๋ง‰ํžˆ๊ณ  111์€ ๋๋‚ฌ์œผ๋‹ˆ 112์‹คํ–‰ => ํ•ฉ์‚ฐ 4๋‹ˆ๊นŒ cnt+1 ์ด๋Ÿฐ์”ฉ์œผ๋กœ ์ž‘๋™๋ฉ๋‹ˆ๋‹ค.




2579 - ๊ณ„๋‹จ ์˜ค๋ฅด๊ธฐ

์ œ๋Œ€๋กœ ๋œ DP ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
DP๋Š” ์ ํ™”์‹์„ ์„ธ์šฐ๋Š”๊ฒŒ ์ œ์ผ ์ค‘์š”ํ•˜๋‹ˆ ๋งŒํผ ๋ฌธ์ œ ๋ถ„์„๋„ ์ž˜ ํ•ด์•ผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


๋ถ„์„


ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์ตœ๋Œ€๊ฐ’์œผ๋กœ ๊ณ„๋‹จ์„ ์˜ค๋ฅด๋ฉด ์ ์ˆ˜๊ฐ€ ๋ช‡์ ์ธ๊ฐ€ ๋ฌป๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
์ตœ๋Œ€๊ฐ’์œผ๋กœ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ,

  1. ๋ฐ”๋กœ ์ง์ „ ๊ณ„๋‹จ์—์„œ ๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์œผ๋กœ ์˜ฌ๋ผ์˜ฌ ๋•Œ
  2. ์ „์ „ ๊ณ„๋‹จ์—์„œ ๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์œผ๋กœ ์˜ฌ๋ผ์˜ฌ ๋•Œ

์ด ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์„ ๊ธฐ์ค€์ ์œผ๋กœ ์‚ผ์€ ์ด์œ ๋Š” N๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ์•„์•ผ๋งŒ ๋๋‚œ๋‹ค๋Š” ์ œ์•ฝ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

1๋ฒˆ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๊ณ„๋‹จ์„ ์—ฐ์†์œผ๋กœ ์ตœ๋Œ€ ๋‘ ๋ฒˆ๋งŒ ๋ฐŸ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ œ์•ฝ์ด ์žˆ์œผ๋ฏ€๋กœ, ์œ„์˜ ๊ทธ๋ฆผ์— ๊ทธ๋ ค๋‘” ๊ฒƒ๊ณผ ๊ฐ™์ด N-3๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ๊ณ  N-1๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ์•„์•ผ ๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์ธ N๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด, 2๋ฒˆ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ œ์•ฝ์ด ์—†์œผ๋ฏ€๋กœ N-2๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ๊ณ  ๋ฐ”๋กœ ๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์ธ N๋ฒˆ์งธ ๊ณ„๋‹จ์„ ๋ฐŸ๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์‹์œผ๋กœ ์„ธ์›Œ๋‘๋ฉด
1. DP(N-3)(N-3๊นŒ์ง€์˜ ์ตœ๋Œ€๊ฐ’) + stair(N-1)(N-1์˜ ๊ณ„๋‹จ ์ ์ˆ˜) + stair(N)(N์˜ ๊ณ„๋‹จ ์ ์ˆ˜)
2. DP(N-2)(N-2๊นŒ์ง€์˜ ์ตœ๋Œ€๊ฐ’) + stair(N)(N์˜ ๊ณ„๋‹จ ์ ์ˆ˜)

๋ผ๋Š” ํ˜•์‹์œผ๋กœ ์„ธ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ฝ”๋“œ

N = int(input())
stair = []
for _ in range(N):
    a = int(input())
    stair.append(a)

์ผ๋‹จ ๊ณ„๋‹จ์˜ ๊ฐœ์ˆ˜ํ•˜๊ณ  ๊ณ„๋‹จ์— ์ ํžŒ ๊ฐ’๋“ค์„ ์ž…๋ ฅ๋ฐ›์•„์ค์‹œ๋‹ค.

if N == 1:
    print(stair[0])
elif N == 2:
    print(stair[0]+stair[1])

1์„ ์ž…๋ ฅ๋ฐ›์•˜์„๋•Œ์™€ 2๋ฅผ ์ž…๋ ฅ๋ฐ›์•˜์„๋•Œ๋Š” ์ ํ™”์‹ ์Šคํƒ€ํŠธ๊ฐ€ N-3๋ถ€ํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ๋กœ ์ €๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค.

else:
    #dp ์ดˆ๊ธฐํ™”
    dp = [0]*301
    dp[0] = stair[0]
    dp[1] = stair[0]+stair[1]
    dp[2] = max(stair[0] + stair[2], stair[1] + stair[2])

dp ์‹œ์ž‘๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. 0๊ณผ 1, 2๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•ด์ค์‹œ๋‹ค. ์ด๊ฒƒ ๋˜ํ•œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ ํ™”์‹์—์„œ ๋‚˜์˜ค๋Š” ์ตœ์†Œ ๋ณ€์ˆ˜๊ฐ€ N-3๋ถ€ํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— 4๋ฒˆ์งธ ๊ณ„๋‹จ๋ถ€ํ„ฐ ์‹ค์งˆ์ ์œผ๋กœ ์ ํ™”์‹ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

    #dp ์ ํ™”์‹
    for i in range(3,N):
        dp[i] = max(dp[i-3]+stair[i-1]+stair[i],dp[i-2]+stair[i])

์œ„์— ๋ฌธ์ œ๋ถ„์„์„ ์‹ค์‹œํ•œ๋Œ€๋กœ

N-3,์ง์ „๊ณ„๋‹จ,๋งˆ์ง€๋ง‰๊ณ„๋‹จ์„ ๊ฑฐ์ณ์„œ ์˜ค๋Š”๊ฐ€
์ง์ „๊ณ„๋‹จ,๋งˆ์ง€๋ง‰๊ณ„๋‹จ์„ ๊ฑฐ์ณ์„œ ์˜ค๋Š”๊ฐ€

๋ฅผ ํŒ๋‹จํ•ด์ฃผ์–ด ๊ทธ์ค‘ ๋” ํฐ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ’์„ dp๋ฆฌ์ŠคํŠธ์— ๋‹ด์•„์ฃผ๋„๋ก ํ•ฉ์‹œ๋‹ค.


๊ทธ๋Ÿฌ๋ฉด dp๊ฐ’์€ ๊ฒฐ๊ตญ ํ•ด๋‹น ๊ณ„๋‹จ ์œ„์น˜์—์„œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ“๊ฐ’์˜ ๋ชจ์ž„์ด ๋˜๊ณ 
๊ทธ์ค‘ ์ œ์ผ ๋งˆ์ง€๋ง‰ ๊ณ„๋‹จ์˜ ์ตœ๋Œ“๊ฐ’ => ๊ฒฐ๊ตญ ์ •๋‹ต์ด๋‹ˆ๊นŒ

    print(dp[N-1])

์„ ํ•ด์ฃผ๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์ •๋‹ต์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


profile
ํ•œ๋ฆผ๋Œ€ํ•™๊ต ์ •๋ณด๊ณผํ•™๋Œ€ 2ํ•™๋…„ ์žฌํ•™์ค‘ / ์œก๊ตฐ ์ •๋ณด๋ณดํ˜ธ๋ณ‘ 22-2๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€