[BOJ][๐ŸŸก4][๋ฐฑ์ค€#02133] ํƒ€์ผ ์ฑ„์šฐ๊ธฐ

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #2133


๋ฌธ์ œ

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


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N(1 โ‰ค N โ‰ค 30)์ด ์ฃผ์–ด์ง„๋‹ค.


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


์˜ˆ์ œ

์ž…๋ ฅ

2


์ถœ๋ ฅ

3


My Sol

def main():
    N = int(input())
    if N%2: return 0
    M = max(N+1, 3)
    T = [0]*M
    T[2] = 3

    i = 4
    acc = 1
    while i<=N:
        T[i] = 3*T[i-2] + 2*acc
        acc += T[i-2]
        i += 2
    return T[N]

print(main())

DP๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ ๋ฌธ์ œ์ธ ํƒ€์ผ ๋ฌธ์ œ์˜ ์‘์šฉ ๋ฌธ์ œ์˜€๋‹ค.

  1. N์„ ์ž…๋ ฅ๋ฐ›๋Š”๋ฐ, N์ด ํ™€์ˆ˜์ด๋ฉด ํ™€์ˆ˜xํ™€์ˆ˜=ํ™€์ˆ˜ ์ด๋ฏ€๋กœ ๋„“์ด๊ฐ€ 2 ๋‹จ์œ„์ธ ๋ธ”๋Ÿญ๋“ค๋กœ ์ฑ„์šธ ์ˆ˜ ์—†์–ด ํ•ญ์ƒ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 0์ด๋‹ค. ์ด๋ฅผ ๊ฐ€์ง€์น˜๊ธฐ ํ•ด์ค€๋‹ค.
  2. DP ๋ฐฐ์—ด์„ T๋กœ ๋‘๊ณ  ์ดˆ๊ธฐํ™” ํ•œ ๋’ค, ๊ธธ์ด๊ฐ€ 2์ธ ๊ฒฝ์šฐ 3๊ฐœ์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  3. ๋„ˆ๋น„๊ฐ€ N์ธ ๊ฒฝ์šฐ(T[N]) ๋„ˆ๋น„๊ฐ€ N-2์ธ ๊ฒฝ์šฐ(T[N-2])์ธ ๊ฒฝ์šฐ์— ๋„ˆ๋น„๊ฐ€ 2์ธ ๊ฒฝ์šฐ, 3๊ฐ€์ง€๋ฅผ ๊ณฑํ•œ 3T[N-2]์™€ ํ•จ๊ป˜ ์„œ๋กœ ๊ต์ฐจํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ acc์— ๋ˆ„์ ํ•˜์—ฌ ๋”ํ•ด์ฃผ๋ฉฐ ๊ณฑํ–ˆ๋‹ค. acc์— 2๋ฅผ ๊ณฑํ•ด T[n]์— ๋”ํ•˜๋Š” ์ด์œ ๋Š”, ๋Œ€์ฒด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ต์ฐจ ๋ธ”๋Ÿญ์€ 2x1๋กœ ๊ณ„์† ์ด์–ด์ง„ ๊ฐ€๋กœ์ค„์ด ์œ„, ์•„๋ž˜ 2๊ฐ€์ง ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์ด๊ฒƒ์ด ์ค‘๊ฐ„์— 3์—ฐ์† ์ด์–ด์ ธ ๋งค๋„๋Ÿฝ๊ฒŒ ์ž˜๋ผ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ์œ„์˜ 3์”ฉ ๊ณฑํ•˜๋Š” ์—ฐ๊ฒฐ์— ํฌํ•จ๋˜๋ฏ€๋กœ ์ด๋Š” ์ œ์™ธํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ