Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 11052. ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ / 16194. ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ 2

deo2kim 2020. 9. 5. 08:21
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

S1 | ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

 

dp ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

  • dp[i]: ์นด๋“œ i์žฅ์„ ๊ตฌ๋งคํ•˜๊ธฐ ์œ„ํ•œ ์ง€๋ถˆ ๊ธˆ์•ก์˜ ์ตœ์†Ÿ๊ฐ’
  • dp[0] = float('inf') (ํŒŒ์ด์ฌ์—์„œ์˜ ์ตœ๋Œ“๊ฐ’)
  • dp[i-j] + dp[j]: ์นด๋“œ๋ฅผ j์žฅ ๊ตฌ๋งคํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Ÿ๊ฐ’๊ณผ ์นด๋“œ๋ฅผ i-j์žฅ ๊ตฌ๋งคํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Ÿ๊ฐ’์˜ ํ•ฉ
    ex) dp[2] + dp[3]: ์นด๋“œ๋ฅผ 2์žฅ ๊ตฌ๋งคํ•˜๊ณ  3์žฅ๊ตฌ๋งคํ•  ๋•Œ์˜ ์ตœ์†Ÿ๊ฐ’
  • dp[i-j] + dp[j] ์™€ dp[i] ์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ๊ฐ’์„ dp์— ์ €์žฅ

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 1๋ฒˆ ์˜ˆ์‹œ

  • dp[0] = float('inf')
  • dp[1] = 1
  • dp[2] = 5 | dp[2] = min(dp[2], dp[1]+dp[1]) | dp[2] = 2
  • dp[3] = 6 | dp[3] = min(dp[3], dp[2]+dp[1]) | dp[3] = 3
  • dp[3] = 3 | dp[3] = min(dp[3], dp[1]+dp[2]) | dp[3] = 3
  • dp[4] = 7 | dp[4] = min(dp[4], dp[3]+dp[1]) | dp[4] = 4
  • ...

 

๐Ÿ’จ

 

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

# 16194. ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ 2

if __name__ == "__main__":
    N = int(input())
    cards =[0]
    cards += list(map(int, input().split()))
    dp = [float('inf')] * (N + 1)

    for i in range(1, N + 1):
        dp[i] = cards[i]

        for j in range(1, i):
            dp[i] = min(dp[i], dp[i - j] + dp[j])
        print(dp)
    print(dp[-1])

# 11052. ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ

n = int(input())
numbers = [0]
numbers += list(map(int, input().split()))
dp = [0]*(n+1)
dp[1] = numbers[1]
dp[2] = max(numbers[2], dp[1]*2)

for i in range(3, n+1):
    dp[i] = numbers[i]
    for j in range(1, i//2+1):
        dp[i] = max(dp[i], dp[j]+dp[i-j])

print(dp[n])



 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/11052

๋งํฌ: https://www.acmicpc.net/problem/16194

 

16194๋ฒˆ: ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ 2

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000) ๋‘˜์งธ ์ค„์—๋Š” Pi๊ฐ€ P1๋ถ€ํ„ฐ PN๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

 

11052๋ฒˆ: ์นด๋“œ ๊ตฌ๋งคํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000) ๋‘˜์งธ ์ค„์—๋Š” Pi๊ฐ€ P1๋ถ€ํ„ฐ PN๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net




๋ฌธ์ œ

์š”์ฆ˜ ๋ฏผ๊ทœ๋„ค ๋™๋„ค์—์„œ๋Š” ์Šคํƒ€ํŠธ๋งํฌ์—์„œ ๋งŒ๋“  PS์นด๋“œ๋ฅผ ๋ชจ์œผ๋Š” ๊ฒƒ์ด ์œ ํ–‰์ด๋‹ค.

PS์นด๋“œ๋Š” PS(Problem Solving)๋ถ„์•ผ์—์„œ ์œ ๋ช…ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ์•„์ด๋””์™€ ์–ผ๊ตด์ด ์ ํ˜€์žˆ๋Š” ์นด๋“œ์ด๋‹ค. ๊ฐ๊ฐ์˜ ์นด๋“œ์—๋Š” ๋“ฑ๊ธ‰์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ‰์ด ์น ํ•ด์ ธ ์žˆ๊ณ , ๋‹ค์Œ๊ณผ ๊ฐ™์ด 8๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • ์ „์„ค์นด๋“œ
  • ๋ ˆ๋“œ์นด๋“œ
  • ์˜ค๋ Œ์ง€์นด๋“œ
  • ํผํ”Œ์นด๋“œ
  • ๋ธ”๋ฃจ์นด๋“œ
  • ์ฒญ๋ก์นด๋“œ
  • ๊ทธ๋ฆฐ์นด๋“œ
  • ๊ทธ๋ ˆ์ด์นด๋“œ

์นด๋“œ๋Š” ์นด๋“œํŒฉ์˜ ํ˜•ํƒœ๋กœ๋งŒ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๊ณ , ์นด๋“œํŒฉ์˜ ์ข…๋ฅ˜๋Š” ์นด๋“œ 1๊ฐœ๊ฐ€ ํฌํ•จ๋œ ์นด๋“œํŒฉ, ์นด๋“œ 2๊ฐœ๊ฐ€ ํฌํ•จ๋œ ์นด๋“œํŒฉ, ... ์นด๋“œ N๊ฐœ๊ฐ€ ํฌํ•จ๋œ ์นด๋“œํŒฉ๊ณผ ๊ฐ™์ด ์ด N๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๋ฏผ๊ทœ๋Š” ์ง€๋‚œ์ฃผ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ˆ์„ ์จ ๋ฒ„๋ ธ๋‹ค. ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ๋ˆ์„ ์ตœ์†Œ๋กœ ์ง€๋ถˆํ•ด์„œ ์นด๋“œ N๊ฐœ๋ฅผ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์นด๋“œ๊ฐ€ i๊ฐœ ํฌํ•จ๋œ ์นด๋“œํŒฉ์˜ ๊ฐ€๊ฒฉ์€ Pi์›์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์นด๋“œํŒฉ์ด ์ด 4๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๊ณ , P1 = 1, P2 = 5, P3 = 6, P4 = 7์ธ ๊ฒฝ์šฐ์— ๋ฏผ๊ทœ๊ฐ€ ์นด๋“œ 4๊ฐœ๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ์†Ÿ๊ฐ’์€ 4์›์ด๋‹ค. 1๊ฐœ ๋“ค์–ด์žˆ๋Š” ์นด๋“œํŒฉ์„ 4๋ฒˆ ์‚ฌ๋ฉด ๋œ๋‹ค.

P1 = 5, P2 = 2, P3 = 8, P4 = 10์ธ ๊ฒฝ์šฐ์—๋Š” ์นด๋“œ๊ฐ€ 2๊ฐœ ๋“ค์–ด์žˆ๋Š” ์นด๋“œํŒฉ์„ 2๋ฒˆ ์‚ฌ๋ฉด 4์›์ด๊ณ , ์ด ๊ฒฝ์šฐ๊ฐ€ ๋ฏผ๊ทœ๊ฐ€ ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ์†Ÿ๊ฐ’์ด๋‹ค.

์นด๋“œ ํŒฉ์˜ ๊ฐ€๊ฒฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, N๊ฐœ์˜ ์นด๋“œ๋ฅผ ๊ตฌ๋งคํ•˜๊ธฐ ์œ„ํ•ด ๋ฏผ๊ทœ๊ฐ€ ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. N๊ฐœ๋ณด๋‹ค ๋งŽ์€ ๊ฐœ์ˆ˜์˜ ์นด๋“œ๋ฅผ ์‚ฐ ๋‹ค์Œ, ๋‚˜๋จธ์ง€ ์นด๋“œ๋ฅผ ๋ฒ„๋ ค์„œ N๊ฐœ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ๊ตฌ๋งคํ•œ ์นด๋“œํŒฉ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ์นด๋“œ ๊ฐœ์ˆ˜์˜ ํ•ฉ์€ N๊ณผ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ๊ตฌ๋งคํ•˜๋ ค๊ณ  ํ•˜๋Š” ์นด๋“œ์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 1,000)

๋‘˜์งธ ์ค„์—๋Š” Pi๊ฐ€ P1๋ถ€ํ„ฐ PN๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Pi ≤ 10,000)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฏผ๊ทœ๊ฐ€ ์นด๋“œ N๊ฐœ๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ๊ธˆ์•ก์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•