๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ช๐Ÿป์ฝ”๋”ฉํ…Œ์ŠคํŠธ/๋ฐฑ์ค€ & ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[DP] ๋ฐฑ์ค€ 2133 ํƒ€์ผ์ฑ„์šฐ๊ธฐ python

๐Ÿ“„ ๋ฐฑ์ค€ 2133 ํƒ€์ผ์ฑ„์šฐ๊ธฐ ๐Ÿ“„

www.acmicpc.net/problem/2133

 

2133๋ฒˆ: ํƒ€์ผ ์ฑ„์šฐ๊ธฐ

3×N ํฌ๊ธฐ์˜ ๋ฒฝ์„ 2×1, 1×2 ํฌ๊ธฐ์˜ ํƒ€์ผ๋กœ ์ฑ„์šฐ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•ด๋ณด์ž.

www.acmicpc.net

๐Ÿค” ๋ฌธ์ œ ํ’€์ด  ๐Ÿค”

n = 2์ผ ๋•Œ, 2 x 1, 1 x 2ํƒ€์ผ๋กœ 3 x 2 ํƒ€์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐฏ์ˆ˜๋ฅผ ์„ธ์–ด๋ณด๋ฉด 3๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋‚˜์˜จ๋‹ค.

n = 3์ผ ๋•Œ, ํ™€์ˆ˜์ผ๋•Œ๋Š” ์–ด๋– ํ•œ ํƒ€์ผ๋„ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค.

 

n = 4์ผ ๋•Œ๋Š” 2๊ฐ€์ง€์˜ ์ƒˆ๋กœ์šด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

n = 6์ผ ๋•Œ ๋˜ํ•œ 2๊ฐ€์ง€์˜ ์ƒˆ๋กœ์šด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ง์ˆ˜๋กœ ์ฆ๊ฐ€ํ•˜๋Š” n์—์„œ๋Š” ๋ชจ๋‘ 2๊ฐ€์ง€์˜ ์ƒˆ๋กœ์šด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

dp[0] = 1, ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ํ•˜๋‚˜

dp[2] = 3, 3๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜

 

dp[4] = dp[2] * 3, + dp[0] * 2, n = 4์ผ๋•Œ๋Š” 2์ผ๋•Œ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์— 3๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณฑํ•ด์ฃผ๊ณ  2๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋” ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

dp[6] = dp[4] * 3 + dp[2] * 2, n = 6์ผ๋•Œ๋Š” ํƒ€์ผ ํฌ๊ธฐ 4๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒˆ๋กœ์šด ๊ฒฝ์šฐ์˜ 2๊ฐ€์ง€๊ฐ€ ๋‚˜์˜ค๋ฏ€๋กœ n = 2์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์— 2๋ฅผ ๊ณฑํ•œ ๊ฐ’์„ ๋”ํ•ด์ค€๋‹ค.

์ด ์ž‘์—…์„ ์ž…๋ ฅ๋ฐ›์€ n๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

โŒจ๏ธ ์ฝ”๋“œ โŒจ๏ธ

n = int(input())

def sol(n):
    if n % 2 != 0:
        return 0
    else:
        dp = [0] * (n + 1)
        dp[0] = 1  # 0์ค„์ธ ๊ฒฝ์šฐ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜์ด๋‹ˆ๊นŒ
        dp[2] = 3
        for i in range(4, n + 1):
            dp[i] = dp[i - 2] * 3
            for j in range(i - 4, -1, -2):
                dp[i] += dp[j] * 2
        return dp[n]

print(sol(n))