๋ฐฑ์ค€ 10844 ํŒŒ์ด์ฌ

2022. 1. 29. 00:56ใ†๐Ÿ”ฑ Algorithm/DP

 

 

10844๋ฒˆ: ์‰ฌ์šด ๊ณ„๋‹จ ์ˆ˜

์ฒซ์งธ ์ค„์— ์ •๋‹ต์„ 1,000,000,000์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

www.acmicpc.net

 

 

์ •๋‹ต ์ฝ”๋“œ 

N = int(input())
array = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
board = []
if N == 1:
    print(9)
    exit()
else:
    board.append(array)
    for n in range(1, N):
        temp = []
        for j in range(10):
            if j == 0:
                temp.append((board[n - 1][1]))
            elif j == 9:
                temp.append((board[n - 1][8]))
            else:
                temp.append((board[n - 1][j - 1] + board[n - 1][j + 1]))
        board.append(temp)
print(sum(board[-1]) % 1000000000)

 

 

์ ‘๊ทผ ์‚ฌ๊ณ 

 

N ์ž๋ฆฌ ์ˆ˜ ์ผ ๋•Œ ์–ด๋–ค ์ˆซ์ž๋กœ ๋๋‚˜๋ƒ์— ๋”ฐ๋ฅธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ •๋ฆฌํ•œ ํ…Œ์ด๋ธ”์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด N = 2 ๋Š” ๋‘ ์ž๋ฆฌ์ˆ˜ ์ž์—ฐ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค. N = 2 ์ผ ๋•Œ ๋์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 3์ด๋ผ๋ฉด, ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 2๊ฐœ๋ผ๋Š” ๋œป์ด๋‹ค ( => 23, 43) 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ N = 3 ์ผ ๋•Œ ๋์ž๋ฆฌ๊ฐ€ 9 ๋ผ๋ฉด, ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 2์ด๋‹ค. (=> 789, 989) 

์ €๋Ÿฐ ํ…Œ์ด๋ธ”์€ ์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ ์ฑ„์›Œ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์„๊นŒ? dp ๋ฅผ ๊ณ„์† ํ’€๋ฉด์„œ ๋Š๋ผ๋Š” ๊ฑด ๋ฌธ์ œ ์†์— ํ•ญ์ƒ ๋ชจ์ข…์˜ ๊ทœ์น™์„ฑ์ด ์ˆจ์–ด์žˆ๋‹ค. ๋์ž๋ฆฌ ์ˆซ์ž๊ฐ€ 0 ๊ณผ 9 ์ผ ๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณค, n ํ–‰์˜ 1 ์—์„œ 8๊นŒ์ง€์˜ ์ˆซ์ž(m)๋Š” ์ด์ „ ํ–‰(n - 1)์˜ ์–‘ ์‚ฌ์ด๋“œ (m - 1, m + 1)  ์˜ ํ•ฉ์ด ๋œ๋‹ค. 

์ฆ‰ 0 ๊ณผ 9์ผ ๋•Œ๋งŒ ๋”ฐ๋กœ ๊ณ„์‚ฐํ•˜๊ณ , 1 ~ 8 ์— ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ๋Š” ์ด์ „ ํ–‰์˜ ์–‘ ์‚ฌ์ด๋“œ์—์„œ ๋”ํ•ด์˜ค๋ฉด ๋œ๋‹ค. ์ด๊ฒƒ์„ ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋œ๋‹ค! 

'๐Ÿ”ฑ Algorithm > DP' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๋ฐฑ์ค€ 11055 ํŒŒ์ด์ฌ  (0) 2022.01.23
๋ฐฑ์ค€ 1912 ํŒŒ์ด์ฌ  (0) 2022.01.20
๋ฐฑ์ค€ 11053 ํŒŒ์ด์ฌ  (0) 2022.01.18
๋ฐฑ์ค€ 12852 ํŒŒ์ด์ฌ  (1) 2022.01.12
๋ฐฑ์ค€ 2293 ํŒŒ์ด์ฌ  (0) 2022.01.09